使用系统1从ms-excel中的WEEKNUM函数中提取R中的周数

时间:2018-02-28 05:26:31

标签: r excel date week-number

我想使用与Excel中WEEKNUM函数相同的 system 1 来提取R中的周数。

请参阅下图

enter image description here

我已经探索了所有可用的选项来从R中的日期中提取周数,但没有任何东西可以实现我的目标

library(parsedate)
dates =c("12/25/2015", "12/26/2015", "12/27/2015", "12/28/2015", "12/29/2015", "12/30/2015", "12/31/2015", "1/1/2016", "1/2/2016", "1/3/2016", "12/24/2016", "12/26/2016", "12/27/2016", "12/28/2016", "12/29/2016", "12/30/2016", "1/1/2017", "1/2/2017")
#Converting dates into date format in R 
dates = as.Date(parse_date(dates), format = "%Y-%m-%d")

desired_output

52 52 53 53 53 53 53 1 1 2 2 52 53 53 53 53 53 53 1 1

任何人都可以帮我找出一种方法来做到这一点。

警告: - 请在将此标记为可能重复之前验证。这可能最终会使那些可以提供问题解决方案的人偏离。

2 个答案:

答案 0 :(得分:0)

哇哇似乎不仅仅是满足了眼睛。似乎1月1日是星期日(例如2006-01-01,2012-01-01),这些1月1日的R中的"%U"给出"01"而不是"00"。下面是一个黑客。

df <- data.frame(dates=as.Date(c(sapply(seq(as.Date("2000-01-01"), by="1 year", length.out=20), function(x) {
    x + -7:7  
})), origin="1970-01-01"))

df$rweeknum <- ifelse(format(as.Date(format(df$dates, "%Y-01-01")), "%a")=="Sun",
    as.integer(strftime(as.Date(df$dates, "%m/%d/%Y"), format = "%U")),
    as.integer(strftime(as.Date(df$dates, "%m/%d/%Y"), format = "%U")) + 1)

#open and check in Excel
write.csv(df, "dates.csv", row.names=FALSE)
shell("dates.csv")

在提出R Core问题之前,需要进一步调查并仔细检查。其他人也可以验证您是否获得了相同的行为? all(format(seq(as.Date("1970-01-01"), by="1 year", length.out=100), "%U")=="00")

答案 1 :(得分:0)

这为我提供了所需的输出。 (OP:如果边缘案例处理不当,请编辑问题以包含它们......)

设定:

dates =c("12/25/2015", "12/26/2015", "12/27/2015", 
        "12/28/2015", "12/29/2015", "12/30/2015", "12/31/2015", 
        "1/1/2016", "1/2/2016", "1/3/2016", "1/4/2016", "1/5/2016", 
        "1/6/2016")
dates = as.Date(dates,format="%m/%d/%Y")

转换:

as.numeric(format(dates,"%U"))+1
## [1] 52 52 53 53 53 53 53  1  1  2  2  2  2

系统信息:

R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X El Capitan 10.11.6

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8