【问题标题】:Is there a way to clean date and time data in r?有没有办法清理 r 中的日期和时间数据?
【发布时间】:2019-04-01 02:41:51
【问题描述】:

我试图将上午 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 格式,方法是执行=> 如果您找到- 然后将其替换为/(用于日期格式)。

我不知道如何实现这个目标。

【问题讨论】:

  • 我的问题是.. 为什么你的datetime 字段有不同的格式?

标签: r date datetime


【解决方案1】:

您可以使用dplyr 库中的case_when() 来确定日期的格式,然后根据格式类型继续进行转换。从那里我们检查 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

【讨论】:

  • 很遗憾,您的回答缺乏关于其形式的质量。这样的输入很可能会被否决和关闭。因此:请使用edit 链接来改进您的答案。此外,您应该注意 preview 窗口(连同解释格式的帮助)以提高您的发布质量。
  • 您能否详细说明它在表单方面的质量不足?如果您有具体建议,我很乐意做出改进。
  • 是的,当然,我的评论应该更清楚。没有文字解释你的答案,仅此而已。它被标记为低质量。
  • 这是一个公平的观点。我已经更新了我的答案,并对解决方案进行了一些评论。
  • 您好,威尔,感谢您的代码。但这并没有很好地工作,因为结果删除了日期的时间部分,并且格式没有从“-”更改为“/”。部分结果为:2015-11-24、2015-05-19、2015-01-01、2015-06-24、2015-04-09、2015-07-29、2015-08-14
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多