我的问题是对先前回答的问题的扩展:
Add multiple columns to R data.table in one function call?
如果 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 有一个
key(DT) = c("x", "y")
,我想分配 2 个新列 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 else),但仅适用于第一列。这是我的错误还是错误?
请注意,无需对 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
最佳答案
很好发现:这是一个新错误。请提交 bug.report(package="data.table")
.
谢谢。
===
现在已在 v1.8.3 中修复。 Bug#2215和 latest NEWS .
关于r - 使用 := 将多列添加到 data.table 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055146/