我有一些数据,其中包含一个分组变量“group”和一个逻辑变量“logic”。
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”列中所有值为TRUE的组。
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[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[all(.SD$logic), group,by = group]
中.SD
是如何定义的呢? - Cron Merdekby
已经被评估时,.SD
才会被定义。*.SD是一个数据表,它包含x数据集的每个组的子集,不包括任何用于by(或keyby)的列。 - Cron Merdek