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

时间:2015-03-08 22:35:52

标签: r data.table

这可能是一个简单的问题,我错过了一些东西。但这让我烦恼。假设这个例子是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

这真的是预期的行为吗?

2 个答案:

答案 0 :(得分:4)

更新:此行为已在development version, 1.9.5中修复,现在正常运作。


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

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

答案 1 :(得分:3)

对我来说这看起来像个错误,但你可以在i周围加上额外的括号来获得预期的行为:

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