r - 计算每年两个日期之间的天数
问题描述
我有一个数据框,每行都有一个开始和结束日期。我想计算两个日期之间的天数并按年份拆分。所以从这个开始:
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 可能会有所帮助,但我不确定从哪里开始。
解决方案
这是一个基本的 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
推荐阅读
- python - Pandas:如何仅删除列末尾的最后一个连字符
- google-forms - 如何根据其他用户过去的回复使 Google 表单自动填充?
- c - 我知道一个地址,但我应该如何判断在哪个部分?使用C的全局区域或堆区域或堆栈区域
- json - 如何解决“手势 RangeError(索引)捕获的异常:无效值:有效值范围为空:0”
- c++ - 什么会使多边形算法中的点仅在正向和反向运行时才能正常工作?
- php - PHP:如何使用键->值对每两个分隔符将一个字符串分解为一个数组
- kubernetes - 将 GKE 集群拆除为“全新”状态而不删除它?
- scala - Spark——自定义reduce函数保存到磁盘然后上传到s3
- javascript - XMLHttpRequest 返回事件对象而不是实际数据
- fortran - Fortran 将未知大小的文件读入数组