r - Lubridate hour() 不适用于从 parse_date_time() 派生的时间

标签 r lubridate

我不明白为什么从函数 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/

相关文章:

r - 如何重新格式化数据并映射它?

r - 如何避免密度曲线在绘图中被切断

r - Tibbles 拒绝 lubridate 的持续时间和周期对象

r - 解析复杂的日期列

r - 如何在 R 中迭代地更改观测值?

r - dplyr 的过滤器不适用于 lubridate 的时间格式?

r - dplyr 在改变数据帧时将日期变成双倍

python - 如何以最佳(Pythonic)方式编写这段代码?

r - 使用 purrr :map 将向量映射到键值列表

r - 如何在R中获取日期间隔的每个季度?