【问题标题】:Convert character to date with the format yyyyww将字符转换为日期格式为 yyyyww
【发布时间】:2021-07-24 11:21:02
【问题描述】:

我有一个问题,我想将当前具有类“字符”的日期列更改为类“日期”。这里的格式是 yyyyww。

您可以在此处查看数据帧的 sn-p:

Avsales <- c("4500", "6000", "5500", "5000", "5100")
Week <- c("2003-23", "2003-24", "2003-25", "2003-26", "2003-27")
Data <- data.frame(Avsales, Week)

我知道这里已经有关于该主题的类似问题(例如Transform year/week to date object)并且我已经尝试应用该解决方案,但是我想保留几周而不是单日,因为它是平均值整周的销售额。

出于这个原因,我尝试了以下解决方案:

data$week <- as.Dates(data$Week, yyyyww = TRUE)

但是,类仍然是“字符”而不是“日期”。

出于这个原因,我尝试了as.Date 之类的其他几个选项

data$week <- as.Date(data$Week, format = "%Y-%W")

但由于我想要“yyyy-ww”格式,所以它不适合我。

可能是因为日期总是意味着特定的日期,而我需要一种完全不同的方法吗?

如果您能在这方面帮助我,我会很高兴。 谢谢!

【问题讨论】:

  • 日期类的格式固定为YYYY-MM-DD,任何其他格式都属于字符类。

标签: r date lubridate week-number


【解决方案1】:

您可以在tsibble 中使用yearweek 类:

library(tsibble)

Avsales <- c("4500", "6000", "5500", "5000", "5100")
Week <- c("2003-23", "2003-24", "2003-25", "2003-26", "2003-27")

df <- data.frame(Week = yearweek(gsub('-',' W',Week)),Avsales = as.numeric(Avsales))
df

#      Week Avsales
#1 2003 W23    4500
#2 2003 W24    6000
#3 2003 W25    5500
#4 2003 W26    5000
#5 2003 W30    5100

library(ggplot2)
ggplot(df)+geom_line(aes(x=Week,y=Avsales))

【讨论】:

    【解决方案2】:

    您不能将星期存储为日期,因为日期必须是天数。但是,您可以使用“aweek”包将周数存储为周。如果有帮助,请查看代码和输出。

    Avsales <- c("4500", "6000", "5500", "5000", "5100")
    Week <- c("2003-23", "2003-24", "2003-25", "2003-26", "2003-27")
    Data <- data.frame(Avsales, Week)
    
    library(aweek)
    
    Data$Week = as.aweek(as.Date(paste(Data$Week, 1, sep="-"), "%Y-%U-%u"),2)
    Data
    
    # Avsales       Week
    # 1    4500 2003-W23-7
    # 2    6000 2003-W24-7
    # 3    5500 2003-W25-7
    # 4    5000 2003-W26-7
    # 5    5100 2003-W27-7
    

    【讨论】:

      【解决方案3】:

      转换你可以使用的东西

      as.Date("2003-23", format = "%Y-%V")

      输出的目标

      "2003-05-01"

      更一般地说,R 中的Date 被定义为“日期表示为自 1970-01-01 以来的天数”

      所以是的,如果您想使用 Date 对象并从所有方法和与之配套的设施中受益,您确实需要指定一天

      另外,我建议使用包lubridate的圆形日期功能

      它将日期更改为该周结束。

      这是它的工作原理:

      my_date <- as.Date("2015-01-01")
      
      weekdays(as.Date("2015-01-01"))
      
      "Thursday"
      
      week_rounded_date <- lubridate::round_date(as.Date("2015-01-01"), unit = 'week')
      
      weekdays(week_rounded_date)
      
      "Sunday"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 2014-01-18
        • 2019-10-13
        相关资源
        最近更新 更多