从csv文件创建经典的单变量R ts对象(不是xts对象)

时间:2018-02-15 21:06:09

标签: r

我有csv个文件y.csv,其结构如下:

Date,   PX_LAST
1/30/1987,  5.03
2/27/1987,  4.82
3/31/1987,  4.46
4/30/1987,  4.55
...

我想将这个csv文件读入经典的R ts对象(nb xts个对象),其中包含日期;我想要使​​用的包需要一个经典的ts对象。我尝试过以下内容(取自R中关于时间序列的许多其他问题之一):

w_zoo <- read.zoo(file="y.csv", sep=",", header = TRUE, index = 1:1, tz = "", format = "%m/%d/%Y")
w_xts <- as.xts(w_zoo)
w_ts <- as.ts(w_xts)

但似乎无法将日期记录到时间序列中。在这种情况下dput(w_ts)给出

structure(c(5.03, 4.82, 4.46, 4.55, 4.24, 4.29, 4.03, 3.79, 4.02), ...
.Tsp = c(1, 1339201, 0.000277777777777778), class = "ts")

我如何实现这一目标?感谢。

2 个答案:

答案 0 :(得分:0)

无法将Date类强制转换为ts对象。如ts的帮助文件中所述,该对象旨在“表示在等间隔时间点采样的数据”。其关联的tsp属性是一种简单的方法,可以跟踪开始,结束和采样频率,而无需特定日期的向量。

在这样的情况下,数据以大致每月的间隔进行采样,ts对象在观察之间将有一长串NA个。我不知道你想用什么方法用于ts对象,但也许你可以将数据聚合成更粗略的时间分辨率(例如,月)并将其用作时间索引而不是?

答案 1 :(得分:0)

在互联网上经过一番痛苦的搜索之后,我明白了如何做到这一点:

首先将数据读入数据帧:

df <- read.csv('y.csv', header=TRUE);

然后逐件创建时间序列;

w_ts <- ts(df$PX_LAST, start = c(as.numeric(format(as.Date(df[1:1, c('Date')], format= "%m/%d/%Y"), "%Y")), as.numeric(format(as.Date(df[1:1, c('Date')], format= "%m/%d/%Y"), "%m"))), frequency=12).