【问题标题】:as.POSIX not converting seconds correctly in Ras.POSIX 没有在 R 中正确转换秒数
【发布时间】:2018-09-30 14:14:23
【问题描述】:

我有时间序列数据以如下所示的序列数据/时间格式记录在 Excel 中

> t3.b1 <- read.csv("t3_b1.csv", header = TRUE)
> t3.b1$time
[1] 0.73958 0.73970 0.73981 0.73993 0.74005 0.74016 0.74028 0.74039 0.74051
[10] 0.74062 0.74074 0.74086 0.74097 0.74109 0.74120 0.74132 0.74144 0.74155
[19] 0.74167 0.74178 0.74190 0.74201 0.74213 0.74225 0.74236 0.74248 0.74259
[28] 0.74271 0.74282 0.74294 0.74306 0.74317 0.74329 0.74340 0.74352 0.74363

我还关联了一个日期(2017 年 8 月 287 日),但我拆分了数据,因为真正相关的是时间。 我想将这些转换为可读时间,以便我可以使用 ggplot,这要求它们采用 POSIX 格式。但是,当我尝试转换为可读时间时,我只是一遍又一遍地得到相同的时间:

> t3.time.POSIX <- as.POSIXct(t3.b1$time, tz = "AKDT", origin = "1900/01/01 00:00:00" )
> t3.time.POSIX
[1] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[3] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[5] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[7] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[9] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[11] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[13] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[15] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[17] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[19] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[21] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[23] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[25] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"
[27] "1900-01-01 00:00:01 GMT" "1900-01-01 00:00:01 GMT"

我的时间应该是 10 秒间隔,都发生在 2017 年 8 月 27 日。我不确定发生了什么。任何帮助将不胜感激。

更新

我已经得到了正确显示的日期格式和时间......几乎。这些应该只是 10 秒的间隔,但有些间隔是一秒。我认为这是将 Excel 中的小数天转换为时间的问题。有没有办法来解决这个问题? IE。确保它们显示正确的秒数?

> conv.t3.time <- convertToDateTime(t3.b1$date.time)
> conv.t3.time
[1] "2017-08-27 17:44:59 AKDT" "2017-08-27 17:45:10 AKDT" "2017-08-27 
17:45:19 AKDT" "2017-08-27 17:45:29 AKDT" "2017-08-27 17:45:40 AKDT" "2017- 
08-27 17:45:49 AKDT"
[7] "2017-08-27 17:46:00 AKDT" "2017-08-27 17:46:09 AKDT" "2017-08-27 
17:46:20 AKDT" "2017-08-27 17:46:29 AKDT" "2017-08-27 17:46:39 AKDT" "2017- 
08-27 17:46:50 AKDT"...

另外,我认为这仍然需要转换为 POSIX,这似乎仍然无法正常工作......

【问题讨论】:

  • 很难看出这些数字如何成为 2017-08-27 日期的 Excel 序列日期时间;它们太小了。
  • 好的 - 那么在尝试转换为 date.time 之前我需要转换为数字吗?
  • 回复 neilfws - 我拆分了日期和时间数据,因为我认为这可能会对我有所帮助,而我只需要时间数据。原来是这样的:[1] 42974.74 42974.74 42974.74...等小数总是被截断,所以我认为这与它有关...

标签: r excel time posix


【解决方案1】:

将时间从 Excel 传输到 R 总是有点像噩梦,当你最终可能会得到部分秒等时。试试这个作为一种软糖,让它准确地记录到秒:

x <- c(42974.73958, 42974.7397, 42974.73981, 42974.73993, 
       42974.74005, 42974.74016, 42974.74028, 42974.74039)

xd <- as.POSIXct(as.Date(x, origin="1899-12-30"))

xd2 <- round(as.numeric(xd))
attributes(xd2) <- c(attributes(xd), tzone="UTC")

#[1] "2017-08-27 17:45:00 UTC" "2017-08-27 17:45:10 UTC"
#[3] "2017-08-27 17:45:20 UTC" "2017-08-27 17:45:30 UTC"
#[5] "2017-08-27 17:45:40 UTC" "2017-08-27 17:45:50 UTC"
#[7] "2017-08-27 17:46:00 UTC" "2017-08-27 17:46:10 UTC"

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多