首页 > 解决方案 > 计算每年两个日期之间的天数

问题描述

我有一个数据框,每行都有一个开始和结束日期。我想计算两个日期之间的天数并按年份拆分。所以从这个开始:

id <- c(1,2,3)
start <- as.Date(c('01/01/2015','01/01/2016','07/01/2015'), format = '%m/%d/%Y')
end <- as.Date(c('12/31/2016','12/31/2016','12/31/2016'), format = '%m/%d/%Y')
df <- data.frame(id, start, end)
ID 开始 结尾
1 2015 年 1 月 1 日 2016 年 12 月 31 日
2 2016 年 1 月 1 日 2016 年 12 月 31 日
3 2015 年 1 月 7 日 2016 年 12 月 31 日

对此:

ID 开始 结尾 days_no。 年_2015 年_2016
1 2015 年 1 月 1 日 2016 年 12 月 31 日 730 365 365
2 2016 年 1 月 1 日 2016 年 12 月 31 日 365 0 365
3 2015 年 7 月 1 日 2016 年 12 月 31 日 548 183 365

任何帮助表示赞赏,请注意我想动态计算年度统计数据,在我的实际案例中我可能会得到很多年列......我猜 lubridate 可能会有所帮助,但我不确定从哪里开始。

标签: rdatelubridate

解决方案


这是一个基本的 R 选项

transform(
  df,
  days_no = end - start,
  year_2015 = pmax(as.Date("2015-12-31") - start, 0),
  year_2016 = pmax(end - as.Date("2016-1-1"), 0)
)

这使

  id      start        end  days_no year_2015 year_2016
1  1 2015-01-01 2016-12-31 730 days  364 days  365 days
2  2 2016-01-01 2016-12-31 365 days    0 days  365 days
3  3 2015-07-01 2016-12-31 549 days  183 days  365 days

推荐阅读