【问题标题】:How to convert week numbers into date format using R如何使用 R 将周数转换为日期格式
【发布时间】:2021-04-07 16:45:14
【问题描述】:

我正在尝试将我的数据集中包含周数的列转换为每周日期。我试图使用 lubridate 包但找不到解决方案。数据集如下所示:

df <- tibble(week = c("202009", "202010", "202011","202012", "202013", "202014"),
             Revenue = c(4543, 6764, 2324, 5674, 2232, 2323))

所以我想创建一个每周格式的日期列,例如(2020-03-07, 2020-03-14)。

有人知道如何将这些周数转换为每周日期吗?

【问题讨论】:

  • 您希望每周的日期是什么?一周的第一个星期一?标准化为第 1 周 = 1 月 1 日?我没有遵守规则。
  • 澄清一下:“202009”是指 2020 年的第 9 周、2009 年的第 20 周还是 202009 年自吸血鬼老板的祖母生日以来的第 2 周?
  • 这个答案可能会有所帮助:stackoverflow.com/a/45587644/9022665
  • 嗨,亚当,从周日到周六。所以第一天是星期日
  • 您好 MrKirushko,是的,我的意思是“2020 年第 9 周”,然后是“2020 年第 10 周”。我应该更清楚。

标签: r tidyverse lubridate as.date


【解决方案1】:

也许有更自动化的方法,但试试这样的方法。我认为这是正确的日子,我查看了 2020 年的日历并数了数。但如果出现问题,则可以使用 (week - 1) * 7 - 1 组件返回您想要的内容。

这只是抓取一年中的第一天,加上 x 周的天数,然后使用 ceiling_date() 查找下一个星期日。

library(dplyr)
library(tidyr)
library(lubridate)

df %>% 
  separate(week, c("year", "week"), sep = 4, convert = TRUE) %>% 
  mutate(date = ceiling_date(ymd(paste(year, "01", "01", sep = "-")) + 
                               (week - 1) * 7 - 1, "week", week_start = 7))

# # A tibble: 6 x 4
#    year  week Revenue date      
#   <int> <int>   <dbl> <date>    
# 1  2020     9    4543 2020-03-01
# 2  2020    10    6764 2020-03-08
# 3  2020    11    2324 2020-03-15
# 4  2020    12    5674 2020-03-22
# 5  2020    13    2232 2020-03-29
# 6  2020    14    2323 2020-04-05

【讨论】:

  • 嗨亚当,这太棒了!非常感谢!
猜你喜欢
  • 2017-05-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2017-01-22
  • 2023-03-31
  • 2014-02-25
相关资源
最近更新 更多