【问题标题】:Date Time conversion error in R - duplicated first time pointR中的日期时间转换错误-重复的第一个时间点
【发布时间】:2018-01-17 19:10:29
【问题描述】:

这里是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"

【问题讨论】:

  • 您的更新与您的原始版本存在完全相同的问题(我已解释过)。看print( as.numeric(z), digits=16)和print( as.numeric(z), digits=20)

标签: r datetime syntax-error


【解决方案1】:

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

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

我认为 print.POSIXct 使用 format.POSIXct 并且它确实使用了您可以尝试更改的 digits.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"

【讨论】:

  • 谢谢。你说的对。但是 d[2] 和 d[1] 没有区别。为什么转换后的时间会缺少 0.0001 秒? > difftime(z[2],z[1]) 时间差 0.00999999 秒 > difftime(d[2],d[1]) 时间差 0 秒
  • 我不明白。 d[1] 和 d[2] 显然有区别。使用代码z+0.0001,我向该向量中的每个 项添加了一个常量。这就是 R 的工作原理。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多