按年提取天数,开始日期和结束日期可能跨年也可能不跨年

Extract number of days by year with beginning and end dates that may or may not span years

您好,我正在尝试将天数提取到变量中 Days2010:Days2015。开始日期和结束日期可能跨越一年或更长时间。

 df <- data.frame(BEGIN_DT = c("12/12/2013", "01/14/2013", "02/12/2012", "09/23/2013", "10/18/2013"),
             END_DT = c("09/04/2015", "06/01/2013", "04/01/2013", "11/09/2015",  "11/12/2014"))
 rownames(df) <- c(16:20)
 df$BEGIN_DT <- as.Date(df$BEGIN_DT, "%m/%d/%Y")
 df$END_DT <- as.Date(df$END_DT, "%m/%d/%Y")


     `BEGIN_DT     END_DT
     16 2013-12-12 2015-09-04
     17 2013-01-14 2013-06-01
     18 2012-02-12 2013-04-01
     19 2013-09-23 2015-11-09
     20 2013-10-18 2014-11-12`

    So, for row 16, I would end up with 
    Days2012 = 19; 
    Days2013 = 365; 
    Days2014 = 365; 
    Days2015 = 246.

提前致谢!

这是一个解决方案,假设您在 df 中有东西:

apply(df, 1, function(x) {
               dates <- seq.Date(as.Date(x[1]), as.Date(x[2]), by = 'days')
               table(format(dates, '%Y'))
               }
      )

你遍历每一行,创建一个日期序列,提取年份并进行交叉表。这为您提供了列表格式。您可以修改输出格式以满足您的需要。

假设您将上述输出保存到名为 l:

的列表中,您可以按如下方式将其放入数据框中
maxLength <- max(sapply(l, length))
as.data.frame(t(sapply(l, function(x)
                            c(x, rep(NA, maxLength - length(x)))
                      )
                )
             )

   2013 2014 2015
16   20  365  247
17  139   NA   NA
18  324   91   NA
19  100  365  313
20   75  316   NA