我创建了一个数据表df
library(data.table)
df <- data.table(id = c(1,1,1,2,2,3), starts = c(0,0,6,0,9,0), ends = c(0,6,10,9,20,7))
#id starts ends
#1: 1 0 0
#2: 1 0 6
#3: 1 6 10
#4: 2 0 9
#5: 2 9 20
#6: 3 0 7
我只想保留相同id
次显示的行数超过两次。在这种情况下,id == 3
将被省略。
预期结果:
# id starts ends
#1: 1 0 0
#2: 1 0 6
#3: 1 6 10
#4: 2 0 9
#5: 2 9 20
答案 0 :(得分:2)
按'id'分组后,使用if
条件检查大于1的行数,然后获取data.table的子集
df[, if(.N > 1) .SD, id]
或者我们可以直接从逻辑索引
进行子集化df[, .SD[.N >1], id]
或者使用快速的行索引
df[df[, .I[.N >1], id]$V1]
或者另一个选项duplicated
也适用于此示例
df[duplicated(id)|duplicated(id, fromLast = TRUE)]