2016-09-05 7 views
1

私は名前のデータフレームを持っています。そして、私はさまざまな食べ物のベクトルを持っています。私はその名前からランダムに1つの要素を選択して、data.tableが以下のようになるようにします。data.tableの各行のベクトルから1つのランダムな要素を選択します。

x<- c("apple","pepsi","rice","coke","banana","butter","bread") 

library(data.table) 

dt <- fread(' 

Name NextItem 
John rice 
Logan butter 
Sarah bread 
Vinny rice 
') 

交換してサンプリングしたい。私は試しました

dt[,NextItem:= sample(x,1)]しかし、上記の例のような異なるランダム要素ではなく、すべての人に同じ食品アイテム(ベクトル要素)をサンプリングします。

+3

でこれを行うことができますを行うことができます'dt [、NextItem:= sample(x、length(Name))]' – MrFlick

答えて

3

私たちは、オプションでグループを使用して、sample

dt[, NextItem := sample(x, 1), by = Name] 

それともあなたはまた、あなたが、あなただけの1つの値を選択する必要はありません.N代わりのby

dt[, NextItem := sample(x, .N, replace = TRUE)] 
+0

もう1つの方法を示してくれてありがとう。サンプル関数の文脈で.Nはここでどのように動作していますか? – gibbz00

+0

@ gibbz00 '.N'はデータセットの行数を与えるので、' sample(x、.N) 'は行の数として' size'を使って 'x'をサンプリングします。デフォルトのオプションは 'replace = FALSE'、それを 'replace = TRUE'に変更することができます – akrun

+1

私の意見では、このケースでは2番目の方法がはるかに優れています。 – Frank

関連する問題