R data.table:当并非所有变量都在组内时,如何筛选%in%的行?
这可能是一个简单的问题,我遗漏了一些东西。但这让我很烦。假设此示例data.table:R data.table:当并非所有变量都在组内时,如何筛选%in%的行?,r,data.table,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] group2 V1 1: z 1 这真的是预期的行为吗 对我来说这看起来像个bug,但是您可以在i周围加上
library(data.table)
test <- data.table(group1 = "a", group2 = "z", value = 1)
但这确实:
test[group1 %in% c("a", "b"), ][,sum(value), group2]
group2 V1
1: z 1
这真的是预期的行为吗 对我来说这看起来像个bug,但是您可以在
i
周围加上括号来获得预期的行为:
test[(group1 %in% c("a", "b")),sum(value), group2]
更新:此行为在中已修复,现在可以正常工作
另一个解决方法是使用
data.table
内置的%chin%
函数
test[group1 %chin% c("a", "b"), sum(value), group2]
# group2 V1
# 1: z 1
谢谢看起来像(另一个)自动索引错误。已经提交。现在,您可以通过执行
选项(datatable.auto.index=FALSE)
禁用自动索引。另外,为了将来,请添加您正在处理的data.table版本。@Arun感谢您的快速回复!我使用的是data.table
1.9.4.@Arun有些关联(虽然它似乎已经被修复了)?@Davidernburg,它没有关联。谢谢,这比测试[group1%in%c(“a”,“b”),][,sum(value),group2]
简单。这是一个很好的解决方法,可能比%in%
快一点。它肯定是,请记住,它仅用于字符
列(请阅读文档)。IMO最安全的解决方法是@Arunsoptions(datatable.auto.index=FALSE)
问题是我在一个包中使用它,我不知道是否要更改它,取决于用户保留此选项。
test[group1 %chin% c("a", "b"), sum(value), group2]
# group2 V1
# 1: z 1