R没有提供正确的星期数

Ana*_*eam 0 datetime r 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)))
Run Code Online (Sandbox Code Playgroud)

结果是这样的

   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
Run Code Online (Sandbox Code Playgroud)

但是当从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
Run Code Online (Sandbox Code Playgroud)

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

在此先多谢!!

Sph*_*cal 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")
Run Code Online (Sandbox Code Playgroud)

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

  • 另见“?week”,它描述了“ isoweek”和“ epiweek”。您可以使用`epiweek(days)+ 1`获得与Excel相同的数字。 (7认同)
  • ...或使用内置的R工具并执行`as.numeric(format(days,“%U”))+ 1`,所有内容均以`?strptime`描述,其中“%U”`格式为美国的约定从0开始而不是1(Excel似乎在使用),而“%V”是ISO 8601标准。 (5认同)