在行和列上使用时间序列操作数据

时间:2014-11-03 20:24:10

标签: r

我是R的新手,我正在试图弄清楚如何操纵具有行和列日期的数据。

基本上,我有一个日期的数据对象,比如2014-10-31。该对象包含未来几个月的期货结算价格:

Date        2014-10-31
2014-11-01       90.54
2014-12-01       90.32
2015-01-01       90.68
2015-02-01       91.48
2015-03-01       91.03

这将存在于一年中的每个工作日。现在,我想要类似的东西:

Date        2014-10-28   2014-10-29   2014-10-30   2014-10-31  ... 
2014-11-01       90.54        90.53        90.57        90.54  ...
2014-12-01       90.21        90.23        90.75        90.32  ...
2015-01-01       90.70        90.45        90.65        90.68  ...
2015-02-01       91.48        91.56        91.53        91.48  ...
2015-03-01       91.02        91.03        91.01        91.03  ...

目前,在R中我将它作为一个列表,每天作为动物园对象,以结算日期作为名称。我知道必须有更好的方法来解决这个问题。数据框架是更好的方法,还是有任何软件包可以使这更容易?

我的最终目标是,例如,能够找到10月份的平均11月价格。因此,我需要获取10月份的所有列,并平均11月的所有价格。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果您有像这样的动物园对象列表:

L <- structure(list(X2014.10.28 = structure(c(90.54, 90.21, 90.7, 
91.48, 91.02), index = structure(c(16375, 16405, 16436, 16467, 
16495), class = "Date"), class = "zoo"), X2014.10.29 = structure(c(90.53, 
90.23, 90.45, 91.56, 91.03), index = structure(c(16375, 16405, 
16436, 16467, 16495), class = "Date"), class = "zoo"), 
X2014.10.30 = structure(c(90.57, 
90.75, 90.65, 91.53, 91.01), index = structure(c(16375, 16405, 
16436, 16467, 16495), class = "Date"), class = "zoo"), 
X2014.10.31 = structure(c(90.54, 
90.32, 90.68, 91.48, 91.03), index = structure(c(16375, 16405, 
16436, 16467, 16495), class = "Date"), class = "zoo")), .Names = c("X2014.10.28", 
"X2014.10.29", "X2014.10.30", "X2014.10.31"))

然后使用cbind将它们合并到一个zoo对象中:

z <- do.call(cbind, L)

,并提供:

> class(z)
[1] "zoo"
> z
           X2014.10.28 X2014.10.29 X2014.10.30 X2014.10.31
2014-11-01       90.54       90.53       90.57       90.54
2014-12-01       90.21       90.23       90.75       90.32
2015-01-01       90.70       90.45       90.65       90.68
2015-02-01       91.48       91.56       91.53       91.48
2015-03-01       91.02       91.03       91.01       91.03