r - 使用 `by` 过滤 data.table 中的行

标签 r data.table

我想过滤符合以下条件的组。 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.tableDT并没有真正过滤行,要么带上所有表,要么什么都不带。
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/

相关文章:

r - 如何避免将日期格式的值分配给矩阵或数据框后转换为数字?

r - 仅当计数高于阈值时才绘制直方图箱

r - 计算 data.table 中满足条件的行数

r - 如何在未在参数中向量化的自定义函数中使用 lapply 函数代替 for 循环

r - sqlite 的替代方法或在 sqlite 中处理日期/时间字段的更好方法

r - 添加水平线,按因素分组

替换 sf 中列表中的几何图形

具有固定参数和的 R 优化

r - 如何在R中创建 "max"虚拟变量?

r - 在 data.table 中创建新列