【问题标题】:R converting a factor YYYY-MM to a dateR将因子YYYY-MM转换为日期
【发布时间】:2015-10-10 21:00:37
【问题描述】:

我有一个日期格式为 YYYY-MM、班级因素的数据框,我正在尝试将其转换为班级日期。

我试过了:

Date <- c("2015-08","2015-09","2015-08")
Val <- c(1,2,3)
df <- data.frame(Date,Val)


df[,1] <- as.POSIXct(as.character(df[,1]), format = "%Y-%m") 
df

但这不起作用。非常感谢您的帮助。

【问题讨论】:

标签: r date


【解决方案1】:

1) 将日期转换为 zoo 的 "yearmon" 类,然后转换为 "Date" 类:

> library(zoo)
> transform(df, Date = as.Date(as.yearmon(Date)))
        Date Val
1 2015-08-01   1
2 2015-09-01   2
3 2015-08-01   3

问题没有指定转换为哪个日期,因此我们使用了当月的第一天。如果需要最后一个月的时间,我们可以使用它来代替:

transform(df, Date = as.Date(as.yearmon(Date), frac = 1))

2) 不使用 zoo 的另一种可能性是自己添加月份中的某一天,然后转换为 "Date" 类。

> transform(df, Date = paste(Date, 1, sep = "-"))
        Date Val
1 2015-08-01   1
2 2015-09-01   2
3 2015-08-01   3

3) 或者,可能只想直接使用"yearmon",因为它直接模拟没有日期的年份和月份。

> library(zoo)
> transform(df, Date = as.yearmon(Date))
      Date Val
1 Aug 2015   1
2 Sep 2015   2
3 Aug 2015   3

注意:不要使用"POSIXct" 类,因为这会产生与时区相关的结果,如果您不小心,可能会导致细微的错误。一个时区的日期不一定与另一个时区的日期相同。

【讨论】:

    【解决方案2】:

    R 不支持“%Y-%m”格式的日期...需要一天

    您可以执行以下操作:

    as.POSIXct(paste0(as.character(df[,1]),"-01"), format = "%Y-%m-%d")
    

    导致

    "2015-08-01 CEST" "2015-09-01 CEST" "2015-08-01 CEST"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2018-05-19
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多