时间列清理与替换。

时间:2017-03-01 17:21:58

标签: r

我可能正在使用世界上最疯狂的数据库之一,我需要为报告格式化导出的时间列。问题是,此列中的时间是从多个源导入的,一些具有正确的sql日期格式(2017-03-01 01:45:00.000),一些日期设置为服务器默认值,只有正确记录的时间(1900-01-01 00:45:00.000)。

例如:

df $ Date = c(“2017-02-01 00:00:00.000”,“2017-03-01 00:00:00.000”,“2017-01-01 00:00:00.000”) df $ Time = c(“1900-01-01 03:30:00.000”,“2017-03-01 04:45:00.000”,“1900-01-01 05:50:00.000”)

我需要一个结果: properdatetime< - c(“2017-02-01 03:30:00.000”,“2017-03-01 04:45:00.000”,“2017-01-01 05:50:00.000”)

我尝试了chron和amp;的混合物gsub,但没有骰子: 库(代下) tmp< - c(df $ Date) tmp< -gsub('$。{1}','',tmp2)

tmp2< - c(df $ Time) tmp2< -gsub('^。{1} $','',tmp2)#regex - 保留列的最后部分

df $ properdatetime< - chron(dates。= tmp,times。= tmp2,format = c('y-m-d','h:m:s'))

我一直收到这个错误: 'convert.dates中的错误(日期。,格式=格式[[1]],来源。= origin。):   格式y-m-d可能不正确'

1 个答案:

答案 0 :(得分:0)

我基本上使用regmatches + gregexpr组合从Date提取日期和从Time提取时间并将它们连接起来以创建propDateTime

Date = c("2017-02-01 00:00:00.000", "2017-03-01 00:00:00.000", "2017-01-01 00:00:00.000") 
Time = c("1900-01-01 03:30:00.000", "2017-03-01 04:45:00.000", "1900-01-01 05:50:00.000")

Dates = regmatches(Date, gregexpr("^[[:digit:][:punct:]]+\\>", Date))
Times = regmatches(Time, gregexpr("\\<[[:digit:][:punct:]]+$", Time))

propDateTime = paste(Dates, Times)
propDateTime = as.POSIXct(propDateTime, format = "%Y-%m-%d %H:%M:%S")

# "2017-02-01 03:30:00 EST" "2017-03-01 04:45:00 EST" "2017-01-01 05:50:00 EST"

在这里,我使用as.POSIXct将数据存储为“DateTime”对象,该对象保留小时,分钟和秒。请注意,创建的日期时间位于EST时区。如果它产生影响,您可以使用zone =参数指定差异时区。