【发布时间】:2020-09-01 01:02:42
【问题描述】:
所以我有数据:
# example data
ID <- c(rep("A", 5), rep("B", 6), rep("C", 2), rep("D", 3), rep("E", 4))
year <- as.numeric(c(rep(c(2012, 2013, 2014, 2015), 4), 2012, 2013, 2015, 2016))
mydata <- cbind(ID, year)
mydata <- as.data.table(mydata)
mydata$year <- as.numeric(mydata$year)
对于这个数据,我发现哪些 ID 至少有连续三年的历史:
mydata2 <- mydata[, grp := cumsum(c(0, diff(year)==1)), by = ID][,max_grp := max(grp), by=ID][max_grp>=2]
现在,我只想为每个 ID 保留最近三年的数据:
mydata2 <- mydata2[which(year >= max(year - 2)), by = ID]
结果是正确的,但我在这里收到警告:
Warning message:
In `[.data.table`(mydata2, which(year >= max(year - 3)), by = ID) :
Ignoring by= because j= is not supplied
基本上,我想过滤连续三年的 ID,如果它们的历史连续超过三年,我只想保留三年。
有没有更好的方法来做到这一点?这似乎不是很健壮,即使我只有有限的经验
【问题讨论】:
-
试试
mydata2 <- mydata2[,which(year >= max(year - 2)), by = ID],因为data.table使用三个“参数”:DT[x,y,by=]而您只提供了两个。
标签: r data.table lubridate