如何删除r中data.table中的所有重复行

时间:2015-10-21 06:27:37

标签: r duplicates data.table

我们说我们有

library(data.table)    
dt <- data.table(Date = c(201405,201405,201504,201505, 201505,201505), ID = c(500,500,600,700,500, 700), INC = c(20,30,50,75,80,90))

返回,

     Date  ID INC
1: 201405 500  20
2: 201405 500  30
3: 201504 600  50
4: 201505 700  75
5: 201505 500  80
6: 201505 700  90

我想删除同一日期中的所有ID。回报应该是

     Date  ID INC
1: 201504 600  50
2: 201505 500  80

你能建议吗?

1 个答案:

答案 0 :(得分:5)

我们按ID&#39;分组,在&#39;日期&#39;上获得duplicated的逻辑索引,并取消,以便所有唯一元素现在都为TRUE,使用{ {1}}获取行索引,提取索引列&#39; V1&#39;并将其用于子集&#39;。

.I

或者另一种选择是按日期&#39;分组&#39; ID&#39;并且dt[dt[, .I[!(duplicated(Date)|duplicated(Date, fromLast=TRUE))], ID]$V1] # Date ID INC #1: 201505 500 80 #2: 201504 600 50 nrow等于1(if),我们得到Data.table的子集(.N==1)。

.SD

或者@Frank提到,我们可以使用data.table / base R combo

dt[, if(.N==1) .SD, .(Date, ID)]
#     Date  ID INC
#1: 201504 600  50
#2: 201505 500  80