2016-09-15 1 views
2

私はRでdata.tableを持っていますが、data.tablesを使って行の値に基づいてリストを計算しようとしています。私は現在、一例としてdata.tableの列にリストを返す

library("data.table") 
dt <- data.table (data.frame(name = c("A","B","C")), num = c(10,20,30)) 
dt [,seq := list(replicate(5,num)),by = .I] 

を次のコードを試してみたが、それはリストを生成する代わりにseq列にnum列の値を繰り返していません。

name  num seq 
A   10  10 
B   20  20 
C   30  30 

下図のように予想される出力は、私はこれで行くにはどうすればよい

name  num seq 
A   10  list(10, 10, 10, 10, 10) 
B   20  list(20, 20, 20, 20, 20) 
C   30  list(30, 30, 30, 30, 30) 

のですか? @Frankと@デビッドへ

+0

dplyr使用するために探している場合は、ご希望の出力は何ですか?あなたが達成しようとしていることをあなたの質問からはっきりとは分かりません。予想される結果のサンプルを表示できますか? –

+0

希望の出力は、期待出力としての質問に記載されています – theArun

+0

'dt [、seq2:= list(list(replicate(5、num))、by = 1:nrow(dt)]'を意味しますか?私が言うことができる限り、 'by = .I 'は何もしません。 – Frank

答えて

2

おかげで、答えは= .Iは黙って何もしないことで

dt [,seq2 := list(list(replicate(5,num))), by = 1:nrow(dt)] 

が主原因です。

また、行単位の操作を行わない方がよいため、次の操作を行うこともできます。異なる方向に

dt[, res := transpose(replicate(5, num, simplify = FALSE))] 

あなたは

dt %>% rowwise() %>% mutate(seq = list(rep(num, 5))) 
+0

'replicate'はベクトル化されていないので、2つのIMOの間に大きな違いはありません。 –

+0

100,000行の場合でも? – theArun

+0

実際には 'n 'でベクトル化されていないので、これはIMOの方が速いはずです。それはベンチマークするのが簡単です –

関連する問題