我们说我们有
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
你能建议吗?
答案 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