我有一个数据框,其中包含一个包含开始日期的列和一个包含结束日期的列。我想知道是否有一个体面的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
,但这是可行的方法吗?我想要达到的最终结果是一个直方图,显示有多少条目是"活跃的"每个日历年。任何帮助表示赞赏。谢谢。
答案 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
的这种方法也适用于您原来的解决方法。