データ分析メモと北欧生活

旧Untitled Note. データ分析、計量経済・統計とR、水産管理、英語勉強、海外生活などについて備忘録や自分の勉強のOutputの場所として

MENU

【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に貼っておきます。

stackoverflow.com