即使原始字符没有毫秒,也要向R中的时间戳添加毫秒吗?

问题描述

我正在做一些动物运动分析,我想将数据提交给名为Movebank的组织进行注释,但是它们要求时间戳记中的毫秒数应包含3个小数位。

我在数据框(dat)中有一列,其中我的时间戳记是字符(不包括毫秒),例如"2017-07-19 16:30:24"

要将它们转换为毫秒级的时间和日期格式,我正在使用代码

options(digits.secs = 3)
dat$timestamp <- as.POSIXct(dat$timestamp,format = "%Y-%m-%d %H:%M:%OS",tz = "UTC")

在将我的时间戳列转换为POSIXct(可以用来制作曲目等)时,效果很好,但不会将每个时间戳的结尾增加.000毫秒。

我也尝试过:

dat$timestamp <- as.POSIXct(dat$timestamp,format = "%Y-%m-%d %H:%M:%OS3",tz = "UTC")

(注意:我添加了.. %OS3 ...) 但这会为我的时间戳返回NA

有人可以阐明这一点吗?我基本上需要在每个时间戳的末尾添加.000,以便使用上面给出的示例,我的格式为"2017-07-19 16:30:24.000"

解决方法

如果没有有效的毫秒数,毫秒将被丢弃。

options(digits.secs=4)

x1 <- as.POSIXct("2017-07-19 16:30:25")
as.POSIXct(paste0(x1,".000"),format="%Y-%m-%d %H:%M:%OS")
# [1] "2017-07-19 16:30:25 UTC"

但是,如果有的话,它们会自动添加。

x2 <- as.POSIXct("2017-07-19 16:30:25.002")
c(x1,x2)
# [1] "2017-07-19 18:30:25.000 CEST" "2017-07-19 18:30:25.002 CEST"