私の質問は、以前に回答したものを拡張したものです。
1回の関数呼び出しでR data.tableに複数の列を追加しますか?
data.table にサブセット化するキーがある場合、複数の新しい列を割り当てるのに問題があります。例:
library(data.table)
example(data.table)
DT[J("a")]
x y v m
1: a 1 42 42
2: a 3 42 42
3: a 6 42 42
つまり、DT には があり、上記のソリューションと同様に、2 つの新しい列を1 回の呼び出しでkey(DT) = c("x", "y")
割り当てたいと考えています。私はこれをします:new1
new2
DT[J("a"),c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]
しかし、私はそれを理解します
x y v m new1
1: a 1 42 42 1
2: a 3 42 42 2
3: a 6 42 42 3
4: b 1 4 5 NA
5: b 3 5 5 NA
6: b 6 6 5 NA
7: c 1 7 8 NA
8: c 3 8 8 NA
9: c 6 9 8 NA
つまり、期待どおりの動作 (x==a の場所に値を割り当て、その他の場合は NA) ですが、最初の列のみです。それは私の間違いですか、それともバグですか?
DT をサブセット化しなくても、これは完全に機能することに注意してください。
DT[,c("new1","new2") := list(c(1,2,3),c(3,2,1)),with=FALSE]
x y v m new1 new2
1: a 1 42 42 1 3
2: a 3 42 42 2 2
3: a 6 42 42 3 1
4: b 1 4 5 1 3
5: b 3 5 5 2 2
6: b 6 6 5 3 1
7: c 1 7 8 1 3
8: c 3 8 8 2 2
9: c 6 9 8 3 1