首页 > 解决方案 > 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

有人可以帮我确定我哪里出错了。

非常感谢提前!!

标签: rdatetimeweek-number

解决方案


本身并不是你做错的任何事情,只是 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")

这将测试第一天是否为星期日并返回适当的星期数起点,然后在每个星期天再添加一个星期数。如果年份之间有重叠,则给出相同的周数。


推荐阅读