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

new*_*bie 4 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))
Run Code Online (Sandbox Code Playgroud)

返回,

     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
Run Code Online (Sandbox Code Playgroud)

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

     Date  ID INC
1: 201504 600  50
2: 201505 500  80
Run Code Online (Sandbox Code Playgroud)

你能建议吗?

akr*_*run 5

我们按“ ID”分组,duplicated在“日期”上获取带有逻辑索引,然后求反,以使所有唯一元素现在都为TRUE,用于.I获取行索引,提取索引列“ V1”并将其用于对“ dt'。

dt[dt[, .I[!(duplicated(Date)|duplicated(Date, fromLast=TRUE))], ID]$V1]
#      Date  ID INC
#1: 201505 500  80
#2: 201504 600  50
Run Code Online (Sandbox Code Playgroud)

或者另一个选择是按'Date','ID'分组,并且ifnrow等于1(.N==1),我们得到Data.table(.SD)的子集。

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

或者如@Frank所述,我们可以使用data.table / base R组合

DT[ave(seq(.N), Date, ID, FUN = function(x) length(x) == 1L)]
Run Code Online (Sandbox Code Playgroud)