r - 使用 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有点相似,但我不想为每个组找到特定的行,而是如果它们的聚合满足某个条件,则识别整个组。
谢谢
解决方案
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")
)
推荐阅读
- javascript - TypeError: nock(...).persist(...).log 不是函数
- kotlin - 运行测试 kotlin 多平台时出错。用于 js 的 kotlinx-coroutines-test 错误:无法获取
- powershell - Windows 10中的Subl命令被识别但不打开崇高文本3
- reactjs - React useState 总是落后 1 步
- css - Next.js 应该使用什么图像大小?
- sql - 错误代码:1231。变量“sql_mode”不能设置为“ORACLE”的值
- ruby - 雪花查询不返回时区信息
- laravel - 将巨大的csv文件导入laravel中的数据库
- python - 状态创建请求后,Flask 不发送响应数据以响应本机
- linux - 如何提高给定随机函数的均匀分布以生成均匀分布的数?