首页 > 解决方案 > 如何将日期时间列“2019-05-01T08:00:00+00:00”拆分为两个日期和时间列?

问题描述

我试图将这种格式的日期时间列拆分2019-05-01T08:00:00+00:00为“日期”和“时间”两列,但无济于事。列名是YearTime,我将其编码如下:

df$Date <- as.Date(sf$YearTime)
df$Time <- format(as.POSIXct(df$YearTime), format = "%H:%M:%S") 

以下是我得到的:

YearTime                       Date          Time      
2019-05-01T08:00:00+00:00      2019-05-01    00:00:00
2019-05-01T08:15:00+00:00      2019-05-01    00:00:00

我不需要00:00:00在“时间”列下,而是需要以下格式:

    YearTime                       Date          Time      
    2019-05-01T08:00:00+00:00      2019-05-01    08:00:00
    2019-05-01T08:15:00+00:00      2019-05-01    08:15:00

仅供参考,“时间”列有 15 分钟的间隔。知道如何实现这一目标吗?

标签: rdplyr

解决方案


在 中明确指定格式as.POSIXct

df$YearTime <- as.POSIXct(df$YearTime, format = '%Y-%m-%dT%H:%M:%S', tz = 'UTC')
df$Date <- as.Date(df$YearTime)
df$Time <- format(df$YearTime, format = "%H:%M:%S") 
df

#             YearTime       Date     Time
#1 2019-05-01 08:00:00 2019-05-01 08:00:00
#2 2019-05-01 08:15:00 2019-05-01 08:15:00

使用lubridate你可以使用ymd_hms-

library(dplyr)
library(lubridate)

df %>%
  mutate(YearTime = ymd_hms(YearTime), 
         Date = as.Date(YearTime), 
         Time = format(YearTime, format = "%H:%M:%S"))

数据

如果您以可重现的格式提供数据,则更容易提供帮助。

df <- structure(list(YearTime = c("2019-05-01T08:00:00+00:00", 
"2019-05-01T08:15:00+00:00")), row.names = c(NA, -2L), class = "data.frame")

推荐阅读