工作日在R和Excel中的输出是不同的。有什么方法可以使两者的输出相同吗?如果可能的话,R的输出应该与Excel电子表格相匹配。下面是代码和数据供参考:
structure(list(Pred_date = structure(c(7L, 8L, 10L, 2L, 9L, 14L,
6L, 12L, 5L, 15L, 13L, 3L, 1L, 12L, 12L, 3L, 12L, 12L, 4L, 7L,
9L, 11L, 11L), .Label = c("5/28/2020", "5/30/2020", "6/1/2020",
"6/12/2020", "6/13/2020", "6/20/2020", "6/22/2020", "6/23/2020",
"6/24/2020", "6/25/2020", "6/4/2020", "6/6/2020", "7/11/2020",
"7/18/2020", "7/4/2020"), class = "factor")), class = "data.frame", row.names = c(NA,
-23L))
library(lubridate)
date$Pred_date<-mdy(date$Pred_date)
date$Week_Act_Pay<-lubridate::week(ymd(date$Pred_date))
head(date)
这是R中的输出:
以下是excel中的输出:
3条答案
按热度按时间bd1hkmkf1#
Excel的
WEEKNUM
函数的起始日为“Sunday”,1月1日是一年中的第一周。您可以在format
中使用"%U"
并向其添加1来重现相同的输出。v64noz0r2#
文档显示这两个函数(R的
week
和Excel的WEEKNUM
)计算的是不同的东西。R:
lubridate::week
计算从给定日期到1月1日之间的7天时段数加1 *。*电子表格:
WEEKNUM
:计算周数*,使包含1月1日的周为一年的第一周,并假定该周从星期日开始。这也称为“epi week”(流行病学的缩写)或“CDC week”。Here is the reference在R中,你可以通过简单地使用
lubridate::epiweek()
来获得epi周。此示例说明如何为日期January 13,2020计算每个值
因此,在您的数据中,您可以使用以下公式获得R中的Excel结果:
打印此内容:
a9wyjsp73#
处理2023年这样的数据需要对Ronak非常有用的建议进行修改。
在2023年这样的星期日开始的年份中,您不希望将1加到返回的周中,因为在这种情况下,该年的第一周将被编码为1,而不是像其他年份那样编码为0。在这样的年份中,如果将1加到返回的周中,则每周都将减去1。
下面是一个似乎与Excel的WEEKNUM很匹配的函数: