我想过滤符合以下条件的组。 DT
带来意想不到的结果。
输入数据
library(data.table)
library(dplyr)
dt <- data.table(
logic = c(TRUE, TRUE, FALSE, TRUE, TRUE, TRUE),
group = c("A" , "A", "A" , "B" , "B" , "B")
)
我想过滤组,其中
logic
字段值为 all
TRUE
.预期行为(来自
dplyr
)如您所见
dplyr
按预期工作,并仅带回 group = B
的值dt %>%
group_by(group) %>%
filter(all(logic))
# Source: local data table [3 x 2]
# Groups: group
# logic group
# 1 TRUE B
# 2 TRUE B
# 3 TRUE B
意外行为
data.table
DT
并没有真正过滤行,要么带上所有表,要么什么都不带。dt[all(logic), group, by = group]
# Empty data.table (0 rows) of 2 cols: group,group
dt[all(.SD$logic), group,by = group]
# group group
# 1: A A
# 2: B B
最佳答案
您可以使用 [
如
dt[, .SD[all(logic)], by = group]
# group logic
#1: B TRUE
#2: B TRUE
#3: B TRUE
关于r - 使用 `by` 过滤 data.table 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393053/