我正在尝试总结从早上4点到下午12点的时间,晚上12点至9点,晚上从晚上9点到凌晨4点的时间。我这样做是为了建立一个逻辑回归模型,以了解是否会发生逮捕事件,而不考虑犯罪类型和犯罪时间。
我尝试使用lubridate函数,但是因为格式是字符串,所以我无法使用该函数。而且,as.Date
函数也无济于事,因为某些字符串具有以下值:03/26/2015 06:56:30 PM
,而某些行具有以下值:04-12-15 20:24
。两种格式完全不同,因此无法使用as.Date
函数。
除了as.Date
函数外,我们还可以通过执行=>等操作将所有04-12-15 20:24
转换为03/26/2015 06:56:30 PM
格式,如果找到-
然后将其替换为/
(用于日期格式)。
我不知道如何实现这个目标。
答案 0 :(得分:2)
您可以使用case_when()
库中的dplyr
确定日期的格式,然后根据格式类型进行转换。从那里,我们检查24小时制时间部分,以根据OP中的分箱确定一天中的时间。
library(dplyr)
chicago15 <- data.frame(Date = c("03/26/2015 06:56:30 PM","04-12-15 20:24",
"03/26/2015 06:56:30 AM","04-12-15 21:24",
"12/31/2017 03:28:43 AM"))
chicago15 %>%
dplyr::mutate(Date2 = dplyr::case_when(
grepl('-',Date) ~ as.POSIXct(Date,format = '%m-%d-%y %H:%M'),
TRUE ~ as.POSIXct(Date,format = '%m/%d/%Y %I:%M:%S %p')
)) %>%
dplyr::mutate(Time_of_Day = dplyr::case_when(
as.numeric(format(Date2,'%H')) >= 21 ~ 'night',
as.numeric(format(Date2,'%H')) >= 12 ~ 'evening',
as.numeric(format(Date2,'%H')) >= 4 ~ 'morning',
TRUE ~ 'night'
))
Date Date2 Time_of_Day
1 03/26/2015 06:56:30 PM 2015-03-26 18:56:30 evening
2 04-12-15 20:24 2015-04-12 20:24:00 evening
3 03/26/2015 06:56:30 AM 2015-03-26 06:56:30 morning
4 04-12-15 21:24 2015-04-12 21:24:00 night
5 12/31/2017 03:28:43 AM 2017-12-31 03:28:43 night