将日期时间列拆分为 R 中的部分

Wil*_*hiu 1 r lubridate

我有一个带有日期时间列的数据框。我想将该列拆分为多列:yearmonthdaytime_12time_24timezone

和需要分别是使用 12 小时约定和 24 小时约定的字符向量time_12time_24我怎样才能做到这一点?

library(tidyverse)
library(lubridate)

# data frame

myDates <- ymd_hm(c('2018-October-31 8:00 PM',
                    '2018Oct31T20:00'))

df <- data.frame(datetime = myDates)

# split datetime into parts

df$year <- year(df$datetime)
df$month <- month(df$datetime)
df$day <- day(df$datetime)
df$time_12 <- '8:00 PM'  ### need help
df$time_24 <- '20:00'    ### need help
df$tz <- tz(df$datetime)

df

# datetime              year month day time_12 time_24  tz
# 1 2018-10-31 20:00:00 2018    10  31 8:00 PM   20:00 UTC
# 2 2018-10-31 20:00:00 2018    10  31 8:00 PM   20:00 UTC

sapply(df, class)

# $datetime
# [1] "POSIXct" "POSIXt" 
# 
# $year
# [1] "numeric"
# 
# $month
# [1] "numeric"
# 
# $day
# [1] "integer"
# 
# $time_12
# [1] "character"
# 
# $time_24
# [1] "character"
# 
# $tz
# [1] "character"


Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以用它format来提取正确的格式

library(dplyr)
df %>% 
  mutate(year = year(datetime),
         month = month(datetime), 
         day = day(datetime), 
         time_12 = format(datetime, "%I:%M %p"), 
         time_24 = format(datetime, '%H:%M'), 
         tz = tz(datetime))
#            datetime year month day  time_12 time_24  tz
#1 2018-10-31 20:00:00 2018    10  31 08:00 PM   20:00 UTC
#2 2018-10-31 20:00:00 2018    10  31 08:00 PM   20:00 UTC
Run Code Online (Sandbox Code Playgroud)