R - 获取两个日期之间的所有日历年

时间:2016-03-15 13:08:35

标签: r date calendar dataframe

我有一个数据框,其中包含一个包含开始日期的列和一个包含结束日期的列。我想知道是否有一个体面的R方式,从base-R到这两个日期之间的所有日历年(包括)。

我有一个解决方法

seq(as.numeric(format(as.Date(df$start[1]), '%Y')), 
      as.numeric(format(as.Date(df$end[1]), '%Y')), by = 1)

但我希望能将整个矢量传递给我。

如果我在其中传递apply函数,我想我可以使用seq,但这是可行的方法吗?我想要达到的最终结果是一个直方图,显示有多少条目是"活跃的"每个日历年。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:3)

只需使用年度序列:

sd = as.Date("1990-01-01")
ed = as.Date("1995-01-01")

substr(seq(sd, ed, "years"), 1, 4)

为您提供输出[1] "1990" "1991" "1992" "1993" "1994" "1995"

编辑:

你可以将它包装在一个函数中并使用mapply,这样你就可以传递整个向量。

sd = as.Date(c("1990-01-01", "1990-01-01", "1993-01-01", "1992-01-01"))
ed = as.Date(c("1995-01-01", "2000-01-01", "2001-01-01", "1998-01-01"))

yearser = function(sd, ed){
    substr(seq(sd, ed, "years"), 1, 4)
}

mapply(function(x, y) yearser(x, y), sd, ed)

当然,使用mapply的这种方法也适用于您原来的解决方法。