【发布时间】:2020-06-03 00:25:03
【问题描述】:
由于某种原因,当我将时间序列数据从数据帧转换为 xts 对象时,时区包含在索引中。我怀疑这是我尝试在对象上运行时间序列建模时的问题,因为我不断收到错误。当我去检查 xts 对象的结构时,xts 对象内的数据以某种方式转换为 chr。它们应该是 num ,这是转换之前的原始值。以下是一些数据:
full_timestamp PRICE
2015-01-02 10:02:27.389055 85.4
2015-01-02 10:03:30.926059 85.3
2015-01-02 10:04:52.231750 85.4
2015-01-02 10:05:37.139763 85.5
2015-01-02 10:06:54.926069 85.5
2015-01-02 10:07:57.253187 85.3
这是数据框的结构:
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 89026 obs. of 2 variables:
$ full_timestamp: POSIXct, format: "2015-01-02 10:02:27.389055" "2015-01-02 10:03:30.926059" "2015-01-02 10:04:52.231750" ...
$ PRICE : num 85.4 85.3 85.4 85.5 85.5 ...
我用来将时间戳从字符向量转换为 POSIXct 时间戳的代码:
testing_eq_4xts$full_timestamp <- as.POSIXct(strptime(testing_eq_4xts$full_timestamp,
format = "%Y-%m-%d:%H:%M:%OS",
tz = ""))
我尝试包含tz = "",根本不包含tz 部分,甚至包含Sys.unsetenv("TZ") 以阻止转换获取时区。我还应该强调,我需要时间戳中的粒度来进行建模。
这是我用来转换为 xts 的代码:
testing_eq_xts <- as.xts(testing_eq_4xts[, names(testing_eq_4xts) != "full_timestamp"],
order.by = testing_eq_4xts$full_timestamp, unique = F)
这就是结构的样子:
An ‘xts’ object on 2015-01-02 10:02:27.389055/2015-12-31 14:37:07.969814 containing:
Data: num [1:89026, 1] 85.4 85.3 85.4 85.5 85.5 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr "PRICE"
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
也是xts的索引:
[1] "2015-01-02 10:02:27.389055 AEDT" "2015-01-02 10:03:30.926059 AEDT"
[3] "2015-01-02 10:04:52.231750 AEDT" "2015-01-02 10:05:37.139763 AEDT"
将时间戳保留为字符向量并在转换为 xts 时尝试将其转换为 POSIXct 也不起作用,使用:
testing_eq_xts2 = xts(testing_eq_4xts[, 2], as.POSIXct(testing_eq_4xts[, 1]))
给出这个错误:
Error in as.POSIXct.default(testing_eq_4xts[, 1]) :
do not know how to convert 'testing_eq_4xts[, 1]' to class “POSIXct”
关于为什么 PRICE 在 xts 对象中已转换为 chr,我是否走在正确的轨道上,如果是,我该如何解决?如果我的假设不正确,那么我需要做什么来解决这个问题?谢谢。
【问题讨论】: