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

问题描述:

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

我有一种变通方法

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

但我想的东西,我可以通过整个载体。

我想我可以使用apply如果我通过seq函数,但它是否是要走的路?我试图达到的最终结果是每个日历年有多少条目“活跃”的直方图。任何帮助表示赞赏。谢谢。

只需使用一个年度序列:

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也将与原来的解决办法工作。

+0

嗨。谢谢回复。那么,我已经知道了这一点。的确,您使用'substr'而不是像我一样强制/格式化,我们达到了相同的结果,但是数据库之间日期格式不同,因此必须保持更一般。任何想法如何将它应用于整个矢量? – Marius

+0

我编辑的帖子,这样的功能可以应用于向量。 –

+0

是的。谢谢。现在我只需要创建一个“真值表”,列数是'sd'和'ed'之间最长的序列,如: 'min_year = as.numeric(format(as.Date(min(as。 (最大(as.vector(ed))),'%Y')) min_max = seq(min_year, max_year,by = 1)' 并将它传递给函数: 'yearser = function(seq_min_max,sd,ed) { min_max%in%seq(as.numeric(format(as.Date(sd),' %y')), as.numeric(format(as.Date(ed),'%Y'))by = 1) – Marius