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
也将与原来的解决办法工作。
嗨。谢谢回复。那么,我已经知道了这一点。的确,您使用'substr'而不是像我一样强制/格式化,我们达到了相同的结果,但是数据库之间日期格式不同,因此必须保持更一般。任何想法如何将它应用于整个矢量? – Marius
我编辑的帖子,这样的功能可以应用于向量。 –
是的。谢谢。现在我只需要创建一个“真值表”,列数是'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