具有相同值的子集数据表出现两次以上

时间:2017-10-15 02:51:48

标签: r dataframe datatable subset

我创建了一个数据表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

1 个答案:

答案 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)]