データフレームの列に変数を使ってアクセスするときは[[]]を使う

やりたいことはhogeという列をもったdfrmというデータフレームがあったときにhogeが入ったrow_nameという変数を使ってアクセスしたいというもの。

row_name <- hoge

# TODO: row_nameを使ってdfrm$hogeのようにアクセスするにはどうやって書けばいいの?!


いつも

dfrm$name

というアクセス方法しかやったことがなく「これきっとシンタックスシュガーで何かしら書き方あるんだろうなぁ」と思ってRクックブックをパラパラしたらP.66にあった。

1つの列を選択するには、以下のリスト表現のいずれかを使います。

dfrm[["name"]]

nameという名前の1列を返します。

dfrm$name

構文が異なるだけで上記と同じです。

ということで先の場合には、

dfrm[[row_name]]

でいけました。

Rである母集団のdata.frameから除きたい集団data.frameがあって、その結果が欲しいとき

母集団がこんな感じで

population <- data.frame(id=c(1, 2, 3), data=c('a', 'b', 'c'))

  id data
1  1    a
2  2    b
3  3    c

除きたいのがこんな感じのとき

except <- data.frame(id=c(2), data=c('b'))

  id data
1  2    b

で、こんな感じで!とinを使えばいいです

population[!(population$id %in% except$id),,drop=FALSE]

  id data
1  1    a
3  3    c

覚えておいた方がいいのは「drop=FALSE」の部分で、これがないと1列(ベクトル)の時に結果の次元が落ちてしまう(idってのが欲しいのに1 3が返ってくる)

> population <- data.frame(id=c(1, 2, 3))
> except <- data.frame(id=c(2))
> population[!(population$id %in% except$id),]
[1] 1 3

1つめのカンマの前で「どういう行を出すか」、2つめのカラムの前で「どういう列を出すか」(今回の場合は何もないので全て)、その後にoptionだと思えば良い

Rで日付を出す。月の連番を出す。

RでSQL作るときとかに今月から半年分くらいの月が欲しかったりするんだけど、そんなときはSys.Date()使えばいい。

> paste(format(seq(Sys.Date(), length.out=6, by="-1 month"), "%Y%m"), collapse=", ")
[1] "201210, 201209, 201208, 201207, 201206, 201205"
  1. 現在の日付を取って、
  2. そこから-1ヶ月ずつ6個作り、
  3. formatを%Y%mにして、
  4. ", "で連結して文字列化

統計解析R言語の勉強

社内で紹介会があったので触ってみた。

インストール

R for Mac OS Xからダウンロードしてインストール

実行した時のサンプルいくつか

R

で実行する


足し算

> 1 + 1
[1] 2


代入

> x <- 4
> x
[1] 4


コメント

> # これはコメントです


10色分色を出す

> rainbow(10)
 [1] "#FF0000FF" "#FF9900FF" "#CCFF00FF" "#33FF00FF" "#00FF66FF" "#00FFFFFF"
 [7] "#0066FFFF" "#3300FFFF" "#CC00FFFF" "#FF0099FF"


関数のヘルプが見たい。例えばrainbow関数

> help("rainbow")

文のヘルプが見たい時は

help("for")

こんな感じ


複素数

> 5i
[1] 0+5i


文字列

> x <- "one"
> x
[1] "one"


catで出力(改行がない)

> cat(x)
one> 


ベクトル(リスト)

> c(3,4,7)
[1] 3 4 7


順列

> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10


リストの長さ

> x = c(3,4,7)
> x
[1] 3 4 7
> length(x)
[1] 3


リストの要素(0ではなく1から始まる)

> x
[1] 3 4 7
> x[2]
[1] 4


繰り返し

> rep(1, 3)
[1] 1 1 1


slice

> x <- c(1,3,5,7)
> x
[1] 1 3 5 7
> x[2:3]
[1] 3 5


リストの中で真になるものを返す

> x[3 < x]
[1] 5 7

これは、ベクトルに計算ができて、

> 3 < x
[1] FALSE FALSE  TRUE  TRUE

実際はこういうことやってる結果です

> x[c(F, F, T, T)]
[1] 5 7


ベクトル全てに足し算

> x
[1] 1 3 5 7
> x + 1
[1] 2 4 6 8


入れ子はフラットになる

> c(1, 2, 3, c(4, 5, c(6, 7)))
[1] 1 2 3 4 5 6 7


ベクトルから2の倍数だけ取り出す

> x <- 1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> x[x%%2 == 0]
[1]  2  4  6  8 10
> 


関数の代入

> myfn <- function(x) 2*x
> myfn(10)
[1] 20


プロットする(グラフを書く)

> plot(1, 2)


円を書く

> pie(x)