通过删除某些字符部分将列转换为datetime

时间:2015-12-03 19:28:08

标签: r datetime posixct lubridate

我有一个类似下面的df,我正在尝试将datettime列转换为日期时间格式。

ID <- c("A","A","B","B")
datettime <- c("2015-12-03T13:04:06-06:00","2015-12-03T13:54:06-06:00","2015-12-03T16:04:06-06:00","2015-12-03T19:54:06-06:00")
df <- data.frame(ID,datettime)

我的数据集中的datettime列是一个字符。我试图将其转换为日期时间格式,但无法正确。

library(lubridate)
df$datettime <- ymd_hms(df$datettime)
#The problem here is the hours,minutes and seconds get messed up. 

df$datettime <- as.POSIXct(df$datettime,format="%Y%m%d %H%M%S")
#This just ouputs NA's in the column

我想要的输出是

  ID           datettime
1  A 2015-12-03 13:04:06
2  A 2015-12-03 13:54:06
3  B 2015-12-03 16:04:06
4  B 2015-12-03 19:54:06

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

也试试这个:

df$datettime <- paste(substr(df$datettime,0,10),substr(df$datettime,12,19))
library(lubridate)
df$datettime <- ymd_hms(df$datettime)

答案 1 :(得分:1)

您忘记在日期中的分隔符之间添加短划线和冒号。这将为您提供所需的输出。

# original code from above:

ID <- c("A","A","B","B")
datettime <- c("2015-12-03T13:04:06-06:00","2015-12-03T13:54:06-06:00","2015-12-03T16:04:06-06:00","2015-12-03T19:54:06-06:00")
df <- data.frame(ID,datettime)

# convert to a POSIXct object
df$datettime <- as.POSIXct(df$datettime,format="%Y-%m-%dT%H:%M:%S")

df
  ID           datettime
1  A 2015-12-03 13:04:06
2  A 2015-12-03 13:54:06
3  B 2015-12-03 16:04:06
4  B 2015-12-03 19:54:06