data.table: 当并非所有变量都在组内时,如何使用 %in% 过滤行?

data.table: how to filter lines with %in% when not all variables are inside the group?

这可能是一个简单的问题,但我遗漏了一些东西。但它困扰着我。假设这个例子 data.table:

library(data.table)
test <- data.table(group1 = "a", group2 = "z", value  = 1)

为什么这行不通

test[group1 %in% c("a", "b"), sum(value), group2]
Erro em `[.data.table`(test, group1 %in% c("a", "b"), sum(value), group2) : 
  i[2] is 0. While grouping, i=0 is allowed when it's the only value. When length(i) > 1, all i should be > 0.

但是这样做:

test[group1 %in% c("a", "b"), ][,sum(value), group2]
   group2 V1
1:      z  1

这真的是预期的行为吗?

这对我来说像是一个错误,但您可以通过在 i:

周围加上额外的括号来获得预期的行为
test[(group1 %in% c("a", "b")),sum(value), group2]

更新: 此行为已在 development version, 1.9.5 中修复,现在可以按预期工作。


另一种解决方法是使用 data.table 内置 %chin% 函数

test[group1 %chin% c("a", "b"), sum(value), group2]
#    group2 V1
# 1:      z  1