我有一个带有日期时间列的数据框。我想将该列拆分为多列:year、month、day、time_12、time_24和timezone。
和需要分别是使用 12 小时约定和 24 小时约定的字符向量time_12。time_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)
我们可以用它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)