【R】dplyrで乱数生成した列(変数)を作る
Rで乱数(擬似乱数, pseudo-random number)を生成するのってよくやると思うのですが、dplyrでデータフレームに乱数を生成した列(新しい変数)を作ろうとして手こずったので備忘録。
例えば、存在するデータフレームに新しくxという標準正規分布から発生させた乱数で変数を作るとすると、
# Data generation set.seed(3) df = data.frame(id = 1:100) # Create x: random variable from N(0,1) df$x = rnorm(nrow(df),0,1)
という感じですか。nrow(df)としたのは、dfの行数と同じ数の乱数を発生させるため。
これをdplyrでやると
df = df %>% mutate(x = rnorm(nrow(df),0,1))
になるのですが、nrow(df)をdplyrのカウント関数 n()でもいいよという話。
df = df %>% mutate(x = rnorm(n(),0,1))
少しすっきりする。
改めて書いてみると、なんで自分がひっかかったのかわからないけど、要は作りたい変数の長さ(行数)分だけ乱数を発生させないといけないので、x = rnorm(1,0,1)みたいなことすると、間違ったことになってしまう。
これも以下のStackoverflowの質問を参考URLに貼っておきます。