R as.POSIXct/as.POSIXlt不';我不喜欢0.61毫秒

R as.POSIXct/as.POSIXlt不';我不喜欢0.61毫秒,r,datetime-format,R,Datetime Format,这是一件奇怪的艺术品。我正在将成千上万个字符向量转换为datetime类,如下所示: alles$DateTime=as.POSIXct(alles$roughdate, tz="EST",format="%Y%m%d.%H%M%S.%OS") 非常直截了当。字符串(alles$roughdate)的格式为YYYYMMDD.HHMMSS.ss,其中.ss为毫秒。正如预期的那样,上述代码是有效的。但是,如果毫秒等于.61,则返回NA而不是日期时间值 这还不算太糟糕,但是当处理成千上万个单元格时,

这是一件奇怪的艺术品。我正在将成千上万个字符向量转换为datetime类,如下所示:

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,与日期的其余部分无关。我确实需要那些日期

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

有什么想法吗

范例

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"

vec如果将时间部分的格式更改为
%H%M%OS
而不是
%H%M%S.%OS
,则它似乎可以正确解析。您可能需要调整
选项
,请参见以下内容:

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"

看起来您的格式字符串是错误的(正如@nrussell在回答中指出的),但出于对知识的好奇,我想知道到底是什么触发了这种特殊的未定义行为。我太懒了,无法跟踪底层的C代码,不过……我一直在对那些导致“NA”的字符串进行子集,将这些字符串转换为带有%H%m%S的时间戳,然后手动添加0.61。我甚至没有想过要调整选项。我会测试的,谢谢!!更新:我被这个项目的其他方面分散了注意力,但是建议的选项(digits.secs=2)并没有解决这个问题。61毫秒仍然突出。奇怪的是,它可能是610毫秒,据我所知,代码运行正常。代码中奇怪的小故障。谢谢大家!我已经花了很长时间考虑了如何在帖子中添加它们,这一点目前还有效。