2016-10-05 4 views
1

サンプルからいくつかのランダムなサブサンプルを作成しようとしています。R - data.tableサンプルの複製

だから、私はするので、条件、私に二つのリスト

[[1]] 
    mpg cyl disp hp drat wt qsec vs am gear carb 
1: 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 
2: 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 
3: 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 

[[2]] 
    mpg cyl disp hp drat wt qsec vs am gear carb 
1: 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 
2: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 
3: 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 

それはサンプリング識別子bindではなくで可能だった場合、私は疑問にを与える

library(data.table) 
replicate(2, mtcars[, .SD[sample(.N,3)], ], simplify=F ) 

のようなものを考えていました複製回数

mpg cyl disp hp drat wt qsec vs am gear carb replication 
1: 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 1 
2: 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 1 
3: 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 1 
4: 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 2 
5: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 2 
6: 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 2 
あなたはそれを維持するために

library(dplyr) 
replicate(2, mtcars[, .SD[sample(.N,3)], ], simplify=F ) %>% bind_rows() 

が、(もちろんloopsを回避)の複製の数を示すよう

何か

おかげ

+1

.idオプションがありますを意味しました'list'または単一のdata.frameとして扱われます – akrun

+1

' lapply(sequence(2)、function(i)...) ) 'を使って新しい列を作ることができます。 – jogo

+0

@akrun単一データフレームありがとう – giacomo

答えて

2

bind_rows

replicate(2, as.data.table(mtcars)[sample(.N,3)], simplify=FALSE ) %>% 
           bind_rows(., .id = 'replication') 
+0

ありがとうございました、それは私が必要としていたものです – giacomo

+0

この方法で 'data.table'でできるだけ速い方法がありますか?または別の方法がありますか? 'data.table'を使って@gacacomoVのおかげで – giacomo

+0

に感謝します。' idcol'オプション付きの 'rbindlist'があります。私は 'dplyr'と' data.table'を混在させたいと思っていました。%rbindlist(。、idcol = "replication") ' – akrun