如何将包含日期(YYYYMMDD)的数字变量转换为POSIXct格式变量

时间:2019-05-16 22:15:41

标签: r

我有一个数据框,其中的一列是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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

library(tidyverse)
library(lubridate)

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

答案 1 :(得分: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