r - R 没有给出正确的周数
问题描述
您好,我正在尝试查找三年内一系列日期的周数。但是 R 没有给出正确的周数。我正在生成从 2016-04-01 到 2019-03-30 的日期序列,然后我试图计算三年内的周数,以便得到周数 54、55、56 等等。
但是,当我检查 2016-04-03 周时,R 将周数显示为 14,而当与 excel 交叉检查时,它是周数 15,而且它只是计算 7 天,而不是参考实际的日历天数。此外,周数从一年开始的 1 开始
代码看起来像这样
days <- seq(as.Date("2016-04-03"),as.Date("2019-03-30"),'days')
weekdays <- data.frame('days'=days, Month = month(days), week = week(days),nweek = rep(1,length(days)))
结果是这样的
days week
2016-04-01 14
2016-04-02 14
2016-04-03 14
2016-04-04 14
2016-04-05 14
2016-04-06 14
2016-04-07 14
2016-04-08 15
2016-04-09 15
2016-04-10 15
2016-04-11 15
2016-04-12 15
但是,当从 excel 中检查时,这就是我得到的
days week
2016-04-01 14
2016-04-02 14
2016-04-03 15
2016-04-04 15
2016-04-05 15
2016-04-06 15
2016-04-07 15
2016-04-08 15
2016-04-09 15
2016-04-10 16
2016-04-11 16
2016-04-12 16
有人可以帮我确定我哪里出错了。
非常感谢提前!!
解决方案
本身并不是你做错的任何事情,只是 R(我认为你正在使用该lubridate
包)和 Excel 计算周数的方式有所不同。
- R 将根据当年 1 月 1 日起的 7 天块计算周数;但
- Excel 根据从星期日开始的一周计算周数。
以 2016 年 1 月的前几天为例。在 2016 年 1 月 1 日星期五,R 和 Excel 都会说这是第 1 周。
2016 年 1 月 3 日星期日:
- 这是在年初的前 7 天内,因此 R 将返回第 1 周;但
- 今天是星期天,所以 Excel 会跳到第 2 周。
尝试这个:
ifelse(test = weekdays.Date(days[1]) == "Sunday", yes = epiweek(days[1]), no = epiweek(days[1]) + 1) + cumsum(weekdays.Date(days) == "Sunday")
这将测试第一天是否为星期日并返回适当的星期数起点,然后在每个星期天再添加一个星期数。如果年份之间有重叠,则给出相同的周数。
推荐阅读
- post - 如何使用 API 在 html 中检测该推文是否成功完成?
- apache-spark - 如何使用 yarn rest api 提交作业以激发火花?我想使用 YARN REST API 提交作业以触发
- kubernetes - Kubernetes CronJob - 通知、RunId 和日志
- javascript - 如何在 Laravel Blade 中使用 javascript 输出未转义的 HTML?
- java - 如何处理使用 Selenium Webdriver 的提示警报
- ios - 将 APS 环境设置为开发时,推送通知不起作用
- java - 如何使用 LayoutInflater 动态添加 editText 和按钮并为它们设置唯一的 id?
- sql - 如何强制在 ssrs 报告中显示一周的开始
- html - 如何使文本显示在它的标签内?
- java - 不使用数组方法创建一副扑克牌