r - 使用 := 将多列添加到 data.table 的子集

标签 r data.table

我的问题是对先前回答的问题的扩展:

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 个新列 new1new2在一次调用中,类似于上述解决方案。我这样做:
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#2215latest NEWS .

关于r - 使用 := 将多列添加到 data.table 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055146/

相关文章:

R Shiny : How to pass reactive variables between nested modules

r - 在 R 路径中向后移动一个目录

r - 不在搜索路径上的环境是否有父级?

r - 将集合操作从 R 的数据帧移植到数据表 : How to identify duplicated rows?

r - 如何通过公共(public) ID 从大型数据集中提取行并利用这些行的方法制作具有这些 ID 的列

r - 使用 Caret 包中的朴素贝叶斯分类器时的警告

r - 如何找到下一步要去的地方

r - .SD 的行数

r - 如何计算从多个连续列中选择最大范围值的变量

r - 统计过去1年内某事件发生的次数