我希望使用data.table找到解决方案― 我有一个包含以下列的data.table:
data <- data.frame(GROUP=c(3,3,4,4,5,6),
YEAR=c(1979,1985,1999,2011,2012,1994),
NAME=c("S","A","J","L","G","A"))
data <- as.data.table(data)
Data.table:
GROUP YEAR NAME
3 1979 Smith
3 1985 Anderson
4 1999 James
4 2011 Liam
5 2012 George
6 1994 Adams
对于每个组,我们要使用以下规则选择一行:
- 如果有一个年份大于2000,则选择最小的年份高于2000的行。
- 如果没有年份大于2000,则选择具有最大年份的行。
期望输出:
GROUP YEAR NAME
3 1985 Anderson
4 2011 Liam
5 2012 George
6 1994 Adams
谢谢!我已经为此苦苦挣扎了一段时间。
Error in [.data.frame(data, , if (any(YEAR > 2000)) .I[which.min(2000 - : unused argument (by = GROUP)
,你能否完全按照这个方式工作? - morgan121data.table
,所以我假设 OP 已经在使用data.table
了 - 如果不是的话,你需要先进行转换。我已经编辑过了。 - thelatemail.I
是一个整数向量,相当于seq_len(nrow(x))
。参考:https://rdrr.io/cran/data.table/man/special-symbols.html(我不得不查一下 :-)) - r2evans