首页 > 解决方案 > 使用 data.table 过滤和分组

问题描述

我有以下数据表:

DT <- data.table(name = c('ana', 'ana', 'ana', 'ana', 'justin', 'justin', 'justin', 'justin'), age = c(12, 26, 24, 14, 28, 36, 17, 8))

我希望能够按姓名分组、按年龄排序并删除第二高年龄低于 28 岁的所有组。如何使用 data.table 做到这一点?

预期的输出应该是:

data.table(name = c('justin', 'justin', 'justin', 'justin'), age = c(28, 36, 17, 8))

由于它将删除“ana”组,因为该组中第二高的年龄小于 28 岁。

标签: rdata.table

解决方案


一个快速简洁的选项(也可以重新排序数据)

setkey(DT, name, age)
DT[, .SD[age[.N-1] >= 28], by = name]
     name age
1: justin   8
2: justin  17
3: justin  28
4: justin  36

推荐阅读