r - 用之前的条目填写缺失的日期

标签 r date time

我有一个包含日期的字符对象,如下所示;

Dec-13-17 06:38AM
Dec-11-17 07:30AM
06:35AM
06:20AM  
06:15AM 
Dec-09-17 01:22PM
Dec-08-17 11:46AM 
05:20AM 
Dec-08-17 09:38AM

我遇到的问题是其中一些条目缺少日期值。 2017 年 12 月 11 日的 6:35、6:20 和 5:15 均缺失,2017 年 12 月 8 日的 05:20AM 缺失。

我写了一个相当长的 ifelse 语句,它总是通过使用 str_count() 查找下一个完整日期时间来查找下一个完整日期,然后使用 gsub 提取仅日期部分然后粘贴它像这样的现有时间条目;

paste0(gsub( " .*$", "", datetime), <existingdate>)

它非常困惑,因为它包含大量嵌套的 ifelse 语句,但问题是我永远不知道我必须查找不完整条目上方的多少行才能从中提取日期。由于这些数据是从网络上抓取的,因此我的嵌套 if else 语句可能会很长才能适应这一点,而且我确信有更好的方法来做到这一点。

非常感谢任何帮助!

最佳答案

假设输入是下面的 s,则提取返回它的日期,如果没有给出 dat,则提取 NA。同时提取给 tim 的时间。在日期上运行 na.locf 以填写缺失的日期并将日期和时间粘贴在一起。

s <- c("Dec-13-17 06:38AM", "Dec-11-17 07:30AM", "06:35AM", "06:20AM", 
  "06:15AM", "Dec-09-17 01:22PM", "Dec-08-17 11:46AM", "05:20AM", 
  "Dec-08-17 09:38AM")

library(zoo)
dat <-  ifelse(grepl("-", s), sub(" .*", "", s), NA)
tim = sub(".* ", "", s)
dattim <- paste(na.locf(dat), tim)
as.POSIXct(dattim, format = "%b-%d-%y %I:%M%p")

给予:

[1] "2017-12-13 06:38:00 EST" "2017-12-11 07:30:00 EST"
[3] "2017-12-11 06:35:00 EST" "2017-12-11 06:20:00 EST"
[5] "2017-12-11 06:15:00 EST" "2017-12-09 13:22:00 EST"
[7] "2017-12-08 11:46:00 EST" "2017-12-08 05:20:00 EST"
[9] "2017-12-08 09:38:00 EST"

关于r - 用之前的条目填写缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803528/

相关文章:

javascript - FlipClock:如何设置 EST 时间

javascript - 本地使用 Node.js 时不同的客户端和服务器时间

angularjs - AngularJs超时,响应时间长

r - 为什么对象在保存/加载到/从 RData 后变得不同?

date - 使用 SwiftDate 的日期之间的小时数

r - 如何附加到已运行的 R 脚本

Mysql 上一个日期

php - 从数据库上的日期检查输入日期的范围

r - 为生存图指定自定义时间点

r - 使用 Tidyverse 检查该值是否存在于任何其他列中