2017-06-26 13 views
1

`のエントリとして、私はこのようになりdata.table有する:私は可変長の整数ベクトルとして扱われるカラムbを必要とするので、私は追加の要素を追加することができベクトルdata.table`

dt <- data.table(a = 1, b = 1, c = 1) 

をそれ。たとえば、最初の行のb列に2を追加したいとします。試しました

dt[a == 1, b := c(b, 2)] 

しかし、それは動作しません。それは私に警告を与える:

Warning message: 
In `[.data.table`(dt, a == 1, `:=`(b, c(b, 2))) : 
    Supplied 2 items to be assigned to 1 items of column 'b' (1 unused) 

これは正しい構文は何ですか?

+0

追加する意味は何ですか? 'b:= b + 2'が働きます。 'b:= paste(b、2、sep =" ")'が動作します。 –

+0

ベクトル 'c(1,2)'になるには 'b'の項目が必要です。 – user3294195

+1

列をリストとして初期化し、代入を行います: 'dt < - data.table(a = 1、b = list(1)、c = 1); 2) ' –

答えて

2
dt <- data.table(a = 1, b = 1:3, c = 1) 
dt[, b := .(lapply(b, c, 2))][] 
# a b c 
#1: 1 1,2 1 
#2: 1 2,2 1 
#3: 1 3,2 1 

上記前dt[, b := .(as.list(b))]を追加し、(すなわちないとき既にlist、及びサブセット又はbyを行う)第listへの変換を必要とする場合。

+0

これは与えられた例では動作しません。すなわち、 'dt < - data.table(a = 1、b = 1、c = 1);を試しました。 dt [、b:= lapply(b、c、2)] [] '、私の質問と同じ警告メッセージが表示されます。 – user3294195

+0

@ user3294195リストをラップするのを忘れました - 編集を参照してください – eddi