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
这可能是一个简单的问题,但我遗漏了一些东西。但它困扰着我。假设这个例子 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