R as.POSIXct未识别上午9点

R as.POSIXct未识别上午9点,r,posixct,R,Posixct,我有一些日内数据,索引的格式如下 c('20140304 95700', '20140304 95800', '20140304 95900', '20140304 100000') 当我尝试使用as.POSIXct将字符串转换为datetime对象时,转换无法识别第九个小时内发生的任何时间,这似乎是因为它们前面没有0 例如,当我跑步的时候 data$DATE <- as.POSIXct(data$DATE, format = "%Y%m%d H%M%S", tz = "EST5EDT"

我有一些日内数据,索引的格式如下

c('20140304 95700', '20140304 95800', '20140304 95900', '20140304 100000')
当我尝试使用
as.POSIXct
将字符串转换为
datetime
对象时,转换无法识别第九个小时内发生的任何时间,这似乎是因为它们前面没有0

例如,当我跑步的时候

data$DATE <- as.POSIXct(data$DATE, format = "%Y%m%d H%M%S", tz = "EST5EDT")

data$DATE金龙给你的评论是正确的。你需要在你的时间里领先0。因此,将它们附加到字符串中

dates <- c('20140304 095700', '20140304 095800', '20140304 095900', '20140304 100000')

dates如果可以安全地假设所有有5位数字的时间都应该有一个前导零,那么这里有一种插入这些零的方法

times <- c('20140304 95700', '20140304 95800', '20140304 95900', '20140304 100000')
new.times <- sub("(.* )(\\d{5})$", "\\10\\2", times)
as.POSIXct(new.times, format="%Y%m%d %H%M%S")
#[1] "2014-03-04 09:57:00 CST" "2014-03-04 09:58:00 CST" "2014-03-04 09:59:00 CST" "2014-03-04 10:00:00 CST"

我不知道这个问题是由POSIXct来解决的,但是你会考虑在10之前的所有小时插入一个前导零吗?
sapply(strsplit(times, " "), 
       function(x) paste(x[1], if (nchar(x[2]) == 5L) paste0("0", x[2]) else x[2]))
#[1] "20140304 095700" "20140304 095800" "20140304 095900" "20140304 100000"