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"