以下数据集:
Name Year more columns
A 2000
A 2001
A 2002
A 2003
B 2000
B 2001
B 2003
C 2001
C 2002
....
library(data.table)
DT = rbind(use.names = FALSE,
data.table(Name = "A", Year = (y <- 2000:2003)),
data.table("B", y[-3]),
data.table("C", y[-c(1,4)]))
我想从我的列名中获取在2000-2003之间至少有一个缺失年份的所有值。 所以在这个例子中,我想从我的列名中获取以下值。 B因为2002年缺失而C因为2000缺失。 我想检查我的专栏名称中的所有值是否在2000-2003之间缺少任何年份。
有一种简单的方法吗?
答案 0 :(得分:2)
这是使用基数R的简单方法:
aggregate(Year ~ Name, df, FUN = function(x) all(2000:2003 %in% x))
Name Year
1 A TRUE
2 B FALSE
3 C FALSE
答案 1 :(得分:2)
另一种可能性是对所有可能组合的交叉连接使用反连接:
library(data.table)
DT[, CJ(Name = Name, Year = Year, unique = TRUE)][!DT, on = .(Name, Year)]
Name Year 1: B 2002 2: C 2000 3: C 2003
这将显示缺少的项目。