as.POSIXct/as.POSIXlt 不喜欢 .61 毫秒

as.POSIXct/as.POSIXlt doesn't like .61 milliseconds

这是一件奇怪的神器。我正在将数以万计的字符向量转换为日期时间 class,如下所示:

alles$DateTime=as.POSIXct(alles$roughdate, tz="EST",format="%Y%m%d.%H%M%S.%OS")

非常简单。字符串(alles$roughdate)格式为YYYYMMDD.HHMMSS.ss.ss为毫秒。正如预期的那样,上面的代码有效。但是,如果毫秒等于 .61,则 returns NA 而不是日期时间值。

这还不错,但是在处理数万个单元格时,总是有几百个返回为 NA。毫秒始终为 0.61,与日期的其余部分无关。我需要那些日期。

我试过隔离这些文件,然后再次将两个数据框合并在一起,但这似乎不起作用。我所有的约会对象都突然不适用了。

有什么想法吗?

示例

vec <- c("20150101.010101.60", "20150101.010101.61", "20150101.010101.62") 
as.POSIXlt(vec, tz="EST", format="%Y%m%d.%H%M%S.%OS")
#[1] "2015-01-01 01:01:60 EST" NA "2015-01-01 01:01:01 EST"

如果将时间部分的格式更改为 %H%M%OS 而不是 %H%M%S.%OS,它似乎可以正确解析。你可能需要调整你的 options 所以看这个:

as.POSIXlt(vec, tz = "EST", format = "%Y%m%d.%H%M%OS")
#[1] "2015-01-01 01:01:01 EST" "2015-01-01 01:01:01 EST" 
#[3] "2015-01-01 01:01:01 EST"

options(digits.secs = 2)
as.POSIXlt(vec, tz = "EST", format = "%Y%m%d.%H%M%OS")
# [1] "2015-01-01 01:01:01.60 EST" "2015-01-01 01:01:01.61 EST"
# [3] "2015-01-01 01:01:01.62 EST"