R 中的日期时间转换错误 - 重复的第一个时间点



R新手在这里。我有一个包含时间戳的数据集。例如:

d <- c("2017-09-17T10:01:23.0000000","2017-09-17T10:01:23.0100000","2017-09-17T10:01:23.0200000","2017-09-17T10:01:23.0300000","2017-09-17T10:01:23.0400000","2017-09-17T10:01:23.0500000","2017-09-17T10:01:23.0600000","2017-09-17T10:01:23.0700000","2017-09-17T10:01:23.0800000","2017-09-17T10:01:23.0900000")

我想将其读入 R 中,所以我使用如下as.POSIXct

z <- as.POSIXct(d[1:10], format = "%Y-%m-%dT%H:%M:%OS")

结果如下:

"2017-09-17 10:01:23.00 CDT" "2017-09-17 10:01:23.00 CDT"** "2017-09-17 10:01:23.01 CDT" "2017-09-17 10:01:23.02 CDT" "2017-09-17 10:01:23.03 CDT" "2017-09-17 10:01:23.04 CDT" "2017-09-17 10:01:23.05 CDT" "2017-09-17 10:01:23.06 CDT" "2017-09-17 10:01:23.07 CDT" **"2017-09-17 10:01:23.08 CDT"

如您所见,转换后的第一个时间点只是重复的。

我做错了什么?

谢谢大家。

更新:我尝试了 20 个时间点,这发生了。

t <- c("2017-09-17T11:47:15.5000000","2017-09-17T11:47:15.5100000","2017-09-17T11:47:15.5200000","2017-09-17T11:47:15.5300000",
       "2017-09-17T11:47:15.5400000","2017-09-17T11:47:15.5500000","2017-09-17T11:47:15.5600000","2017-09-17T11:47:15.5700000",
       "2017-09-17T11:47:15.5800000","2017-09-17T11:47:15.5900000","2017-09-17T11:47:15.6000000","2017-09-17T11:47:15.6100000",
       "2017-09-17T11:47:15.6200000","2017-09-17T11:47:15.6300000","2017-09-17T11:47:15.6400000","2017-09-17T11:47:15.6500000",
       "2017-09-17T11:47:15.6600000","2017-09-17T11:47:15.6700000","2017-09-17T11:47:15.6800000","2017-09-17T11:47:15.6900000")
z <- as.POSIXct(t[1:20], format = "%Y-%m-%dT%H:%M:%OS")

结果

>"2017-09-17 11:47:15.50 CDT" "2017-09-17 11:47:15.50 CDT" "2017-09-17 11:47:15.51 CDT" "2017-09-17 11:47:15.52 CDT" "2017-09-17 11:47:15.53 CDT" "2017-09-17 11:47:15.54 CDT" "2017-09-17 11:47:15.55 CDT" "2017-09-17 11:47:15.56 CDT" "2017-09-17 11:47:15.57 CDT" "2017-09-17 11:47:15.58 CDT" "2017-09-17 11:47:15.59 CDT" "2017-09-17 11:47:15.60 CDT" **"2017-09-17 11:47:15.61 CDT" "2017-09-17 11:47:15.63 CDT"** "2017-09-17 11:47:15.64 CDT" "2017-09-17 11:47:15.65 CDT" "2017-09-17 11:47:15.66 CDT" "2017-09-17 11:47:15.67 CDT" "2017-09-17 11:47:15.68 CDT" "2017-09-17 11:47:15.69 CDT"

显然,打印表示无法处理 z[1] 的十进制表示不精确的事实: 看看两者的区别:

> z[1] - z[2]
Time difference of -0.00999999 secs

我认为那个印刷品。POSIXct 使用格式。POSIXct 并且它确实使用了您可以尝试更改的数字.secs 选项。它并没有真正解决我机器上的问题,但就其效果而言,它是特定于操作系统的。

options(digits.secs = 6)

一个表明它们不一样的黑客是

z+0.0001
 [1] "2017-09-17 10:01:23.0000 PDT" "2017-09-17 10:01:23.0100 PDT" "2017-09-17 10:01:23.0200 PDT"
 [4] "2017-09-17 10:01:23.0300 PDT" "2017-09-17 10:01:23.0400 PDT" "2017-09-17 10:01:23.0500 PDT"
 [7] "2017-09-17 10:01:23.0600 PDT" "2017-09-17 10:01:23.0700 PDT" "2017-09-17 10:01:23.0800 PDT"
[10] "2017-09-17 10:01:23.0900 PDT"

相关内容

最新更新