处理非标准时间数据

时间:2017-05-09 21:41:11

标签: r date time lubridate

我有一些时间数据作为数据集的一部分 - 让我们调用df,这种格式会使操作变得困难。让我们把这个时间变量称为" time"。以下是数据的一些示例:

df$time
12/17/2012
1945
1950
2032
2/24/2012
2206
2209
2211

如您所见,时间变量列以给定日期(mm / dd / yyyy)开始,然后是在同一日期发生的给定事件的时间(hhmm)。

是否可以携带'将月,日和年值降低到相应的小时和时间值?我希望我的数据最终看起来像这样:

df$time
12/17/2012 19:45
12/17/2012 19:50
12/17/2012 20:32
2/24/2012  22:06
2/24/2012  22:09
2/24/2012  22:11

谢谢!

2 个答案:

答案 0 :(得分:2)

首先使用以下内容转换小时格式:

time=gsub("^(\\d{2})(\\d{2})$","\\1:\\2",time)

然后找到日期的位置:

pos=grep("\\d+/\\d+/\\d+",time)

然后构建结果向量:

dates=rep(time[pos],times=(diff(c(pos,length(time)+1))-1))
hours=time[-pos]
time=paste(dates,hours)

最后,如果您需要,可以将其转换为POSIXct

time=as.POSIXct(time,format="%m/%d/%Y %H:%M")

答案 1 :(得分:0)

使用dplyr中的na.locf进行zoo式回答。他的作品是将日期和时间分隔为单独的列,并显示“/”,将日期与na.locf结合,过滤掉原始日期行,将列粘贴在一起,然后将其转换为{{1} }

POSIXct