首页 > 解决方案 > 使用 data.table 按聚合值设置子集

问题描述

假设我按某个列对 data.table 进行分组并计算每组的值。然后我想删除有 count 的组N < 2。有没有一种有效的 data.table 方法来做到这一点?

示例数据:

id | col1
-------------
1  | "A"
2  | "A"
3  | "B"
4  | "C"
5  | "C"

现在:分组col1和计数,删除属于组的行count < 2

示例输出:(行3已删除)

id | col1
-------------
1  | "A"
2  | "A"
4  | "C"
5  | "C"

我发现Subset by group 与 data.table有点相似,但我不想为每个组找到特定的行,而是如果它们的聚合满足某个条件,则识别整个组。

谢谢

标签: rgroup-bydata.table

解决方案


values_2_keep <- DT[, .N, by = col1][N>=2, col1] 
# Alternatively DT[rowid(col1)==2L, col1]

DT[col1 %in% values_2_keep]

   id col1
1:  1    A
2:  2    A
3:  4    C
4:  5    C

可重现的数据:

DT <- data.table(
  id = 1:5,
  col1 = c("A", "A", "B", "C", "C")
)

推荐阅读