我不明白为什么从函数 parse_date_time 派生的时间不能被 lubridate() 中的另一个函数使用。 这会生成一个 df,其中包含正确解析的 am/pm 日期。
dt2 <- data.frame('date_time' = c("11/24/19 06:00:00 PM",
"11/25/19 12:00:00 AM",
"11/25/19 06:00:00 AM",
"11/25/19 12:00:00 PM",
"11/25/19 06:00:00 PM",
"11/26/19 12:00:00 AM"),
'date' = c(1:6), 'time' = c(1:6)) %>%
mutate(date_time = parse_date_time(date_time, orders = "mdy IMS %p"),
date = date(date_time),
time = strftime(date_time,"%H:%M:%S", tz = "UTC"))
当我尝试从小时列中提取小时时,出现错误:
dt2 <- dt2 %>% mutate(hour_from_hour = hour(time))
错误:mutate()
列 hour_from_hour
出现问题。
我hour_from_hour = 小时(时间)
。
x 字符串不是标准的明确格式
但是当我使用原始变量“date_time”时,它工作正常。
dt2 <- dt2 %>% mutate(hour_from_date_time = hour(date_time))
我的数据集具有可变标题(有些是日期时间,有些已经解析)。如果我可以在时间列上使用 hour() 那就太好了。
最佳答案
R 没有原生方法来处理与一天无关的时间。但是您可以使用像 hms
这样的包。例如:
library(tidyverse)
library(lubridate)
library(hms)
dt2 <- data.frame('date_time' = c("11/24/19 06:00:00 PM",
"11/25/19 12:00:00 AM",
"11/25/19 06:00:00 AM",
"11/25/19 12:00:00 PM",
"11/25/19 06:00:00 PM",
"11/26/19 12:00:00 AM"),
'date' = c(1:6), 'time' = c(1:6)) %>%
mutate(date_time = parse_date_time(date_time, orders = "mdy IMS %p"),
date = date(date_time),
time = as_hms(date_time),
hour = hour(time))
但说实话,保留 date_time
列并直接使用 hour
可能会更好。
关于r - Lubridate hour() 不适用于从 parse_date_time() 派生的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70429103/