检查某个时间范围内是否缺少日期

时间:2018-05-17 12:33:16

标签: dataframe

以下数据集:

 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之间缺少任何年份。

有一种简单的方法吗?

2 个答案:

答案 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

这将显示缺少的项目。