【发布时间】:2019-07-02 00:35:33
【问题描述】:
我想一次使用 data.table 尽可能高效地执行多个过滤器。有没有办法通过“开”来实现这一点。
由于效率的原因,我需要将它放在 data.table 中(我必须对数据集执行数百万个过滤器 + 汇总)
这个带有 dplyr 的代码应该在 data.table 中完成。 (希望使用我已经尝试过的相同结构,我可能会遗漏一些东西)。
data("iris")
iris %>% filter(Sepal.Length %in% c(5, 6.2),
Species %in% c("setosa", "virginica", "versicolor"))
我试过了,
DT <- setDT(iris)
DT[.(c(5, 6.2), c("setosa", "virginica", "versicolor")), on = c( "Sepal.Length", "Species")]
我知道我可以先执行一个过滤器然后再执行另一个过滤器,但是代码比较慢。
我收到警告:
在 as.data.table.list(i) 中:项目 1 的大小为 2,但最大大小为 3 (回收剩下 1 件)
据我所知,它用“setosa”过滤 5,用“virginica”过滤 6.2,再用“versicolor”过滤 5。
【问题讨论】:
-
你在找
DT[CJ(Sepal.Length=c(5, 6.2), Species=c("setosa", "virginica", "versicolor")), on = c( "Sepal.Length", "Species")]吗? -
为什么不只是
iris[Sepal.Length %in% c(5, 6.2) & Species %in% c("setosa", "virginica", "versicolor") ,]?还是您的意思是“一个过滤器,然后是另一个过滤器”? -
%chin%在 Species 列中会更快 -
整数的 %chin% 比 %in% 快吗?即,如果必须执行 %in% 的千分之一,您会建议转换为角色吗?
-
%in% 表示整数,%chin% 表示字符
标签: r data.table