r - 有没有办法清理 r 中的日期和时间数据?
问题描述
我试图将早上 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
格式,如果你找到-
然后将其替换为/
(对于日期格式)。
我不知道如何实现这个目标。
解决方案
您可以case_when()
从dplyr
库中使用来确定日期的格式,然后根据格式类型进行转换。从那里我们检查 24H 时间组件,以根据 OP 中的 bin 确定一天中的时间。
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
推荐阅读
- vba - VBA:从范围2中的范围1查找日期->如果匹配则颜色单元格
- laravel - Laravel 5.6 多对多关系中更新、存储和删除的正确方法
- javascript - Keycloak 对象属性“已验证”在应为 true 时返回 false
- c# - Perfmon - # 逻辑线程爆炸
- python - Ploting data points by omitting the lines Python Pandas
- javascript - 如何使用来自rest api的antd表组件渲染数据网格
- android - Android Studio 无法在包中找到数据绑定类
- bash - 使用 Bash 遍历目录和子目录中的所有文件
- vba - 复制数组中的值和颜色索引
- ember.js - RangeError:使用 ember-cli-mirage 时超出了最大调用堆栈大小