【发布时间】:2020-05-14 16:10:34
【问题描述】:
我一直在尝试使用this question 中提供的解决方案,但由于某种原因它无法正常工作。
基本上,我想找到至少有 4 个连续年的所有 ID,并且只保留属于这些 ID 的行。
有什么想法吗?
# 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)
# provided solution
mydata2 <- setDT(mydata)[, grp := cumsum(c(0, diff(year)) > 1), by = ID
][, if (.N > 4) .SD, by = grp][, grp := NULL][]
【问题讨论】:
-
您希望解决方案使用
data.table吗? -
This solution from @Akrun 似乎适用于您的数据。我用底部的“紧凑”版本对其进行了测试。
-
我认为链接帖子中选择的解决方案缺少第二个
[中的另一个分组变量。您将需要setDT(mydata)[, grp := cumsum(c(0, diff(year))!=1L), ID][, if (.N >= 4) .SD, .(ID, grp)]或[:mydata[mydata[, if (.N >= 4L) .I, .(ID, cumsum(c(0L, diff(year)!=1L)))]$V1]和mydata <- data.table(ID, year)在没有cbind和as.numeric的情况下工作得很好
标签: r data.table diff cumsum