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

时间:2016-02-05 21:40:47

标签: r datetime-format

这是一个奇怪的神器。我正在将成千上万个字符向量转换为日期时间类,如下所示:

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

非常直接。字符串(alles$roughdate)的格式为YYYYMMDD.HHMMSS.ss.ss为毫秒。如上所述,上述代码可以正常工作。但是,如果毫秒等于.61,则返回NA而不是日期时间值。

这不是太糟糕,但在处理数万个单元格时,几百个总是作为NA返回。毫秒总是.61,与其余的日期无关。我需要那些日期。

我已经尝试隔离这些文件,然后再将两个数据框合并在一起,但这似乎不起作用。我所有的约会都是NA。

有什么想法?

实施例

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"

1 个答案:

答案 0 :(得分:3)

如果您将时间部分的格式更改为%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"