假设我们有
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
您能否提供建议?
dt[dt[, !(duplicated(ID)|duplicated(ID,fromLast=TRUE)), by=Date]$V1]
中有一个类似的。 - thelatemail.I
。 - akrunDT[ave(seq(.N), Date, ID, FUN = function(x) length(x) == 1L)]
。虽然不太符合data.table的风格,但它不需要使用by
或两次扫描向量来查找重复项。 - Frankave
函数在内部调用了lapply
和split
,因此它确实使用了by
。 - thelatemailby
拆分数据框的开销比拆分单个向量要大...哦——刚刚测试了一下是否能够制作一个例子,在半秒钟内进行了if (...) .SD
后,我的 R 会话在执行ave
时挂起了,所以...没错。 - Frank