我有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")
我如何实现这一目标?感谢。
答案 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).