【问题标题】:How to transform a numeric variable containing a date (YYYYMMDD) into a POSIXct format variable [duplicate]如何将包含日期(YYYYMMDD)的数值变量转换为POSIXct格式变量[重复]
【发布时间】:2019-05-16 22:15:40
【问题描述】:

我有一个数据框,其中一列是date,但它是一个数字。我想把它转换成 POSIXct 格式,但我不知道怎么做。

我曾想过使用不同的函数(gsubsubstr 等),但据我所知,它们都不允许我在特定位置的数字之间添加“-”。

我该怎么做?

例如,我有这个数据框df1

df1<- data.frame(date=c(20160801,20160802,20160803),
                   var1=c(4,56,76))

> df1
      date var1
1 20160801    4
2 20160802   56
3 20160803   76

我想得到这个:

> df1
        date var1
1 2016-08-01    4
2 2016-08-02   56
3 2016-08-03   76

我该怎么做?

【问题讨论】:

  • 不用麻烦添加- 或加载额外的包,只需指定不带空格的格式 - as.Date(as.character(df1$date), format="%Y%m%d")
  • 如果你真的想要上课POSIXctas.POSIXct(strptime(as.character(df1$date), "%Y%m%d"))。但我怀疑 Date 类的对象也可以。
  • @neilfws - 为什么会有额外的strptime? - 直接去 - as.POSIXct(as.character(df1$date), format="%Y%m%d")
  • 是的!谢谢你们的cmets!!我认为我的帖子重复了...我没有找到您提到的帖子...我要删除我的帖子吗?

标签: r


【解决方案1】:

您可以使用 lubridate 轻松做到这一点。

library(tidyverse)
library(lubridate)

df1<- data.frame(
  date=c(20160801, 20160802, 20160803),
  var1=c(4, 56, 76)
)
df1 %>% 
  mutate(date = ymd(date))

【讨论】:

    【解决方案2】:

    使用基础 R,

    df1 <- data.frame(date=c(20160801,20160802,20160803),
                      var1=c(4,56,76))
    
    > df1
          date var1
    1 20160801    4
    2 20160802   56
    3 20160803   76
    
    

    使用函数as.Date.charactertryFormats 参数定义为以与当前数据相同的方式定义。在这种情况下,"%Y%m%d"

    df1$date <- as.Date.character(df1$date, tryFormats = "%Y%m%d")
    
    > df1
            date var1
    1 2016-08-01    4
    2 2016-08-02   56
    3 2016-08-03   76
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      相关资源
      最近更新 更多