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)
你能建议吗?
我们按“ 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)