【发布时间】:2020-03-02 12:33:37
【问题描述】:
我有一列作为原始文本输入的时间。下面是一个示例(帖子底部的数据输入代码):
#> id time
#> 1 NA <NA>
#> 2 1 7:50 pm
#> 3 2 7:20 pm
#> 4 3 3:20 pm
我想添加指示变量,例如,指示时间是否为:
- 晚上 7 点以后
- 晚上 7 点到 7.30 点之间
所以我想要的输出应该是这样的:
#> id time before_1930 between_1900_1930
#> 1 NA <NA> NA NA
#> 2 1 7:50 pm 0 0
#> 3 2 7:20 pm 1 1
#> 4 3 3:20 pm 1 0
到目前为止,我已经尝试使用parse_date_time 阅读时代,但这增加了一个日期:
library(lubridate)
df <- df %>% mutate(time = lubridate::parse_date_time(time, '%I:%M %p'))
df
#> id time
#> 1 NA <NA>
#> 2 1 0000-01-01 19:50:00
#> 3 2 0000-01-01 19:20:00
#> 4 3 0000-01-01 15:20:00
有没有一种简单的方法可以直接处理小时和分钟,然后创建我提到的虚拟变量?
数据输入代码
df <- data.frame(
id = c(NA, 1, 2, 3),
time = c(NA, "7:50 pm", "7:20 pm", "3:20 pm")
)
【问题讨论】:
标签: r dplyr tidyverse lubridate