R没有提供正确的星期数

时间:2019-05-08 23:58:08

标签: r datetime week-number

您好,我试图找到三年内一系列日期的星期数。但是,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

有人可以帮我找出我要去哪里的错误吗。

非常感谢!

1 个答案:

答案 0 :(得分:8)

您做错的本身没什么,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")

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