R 如何使用(x)apply更改列表中每个zoo元素的索引格式
以下是设置:R 如何使用(x)apply更改列表中每个zoo元素的索引格式,r,apply,R,Apply,以下是设置: x.date <- as.Date((paste(2003, c(1, 3, 7, 9, 12), 2, sep = "-")) x <- zoo(rnorm(5), x.date) y.date <- as.Date(paste(2005, c(2, 4, 8, 10, 11), 2, sep = "-")) y <- zoo(rnorm(5), y.date) xy.list<-list(x,y)
x.date <- as.Date((paste(2003, c(1, 3, 7, 9, 12), 2, sep = "-"))
x <- zoo(rnorm(5), x.date)
y.date <- as.Date(paste(2005, c(2, 4, 8, 10, 11), 2, sep = "-"))
y <- zoo(rnorm(5), y.date)
xy.list<-list(x,y)
xy.list
[[1]] 2003-01-02 2003-03-02 2003-07-02 2003-09-02 2003-12-02
-1.4804701 0.5280618 0.4619898 -0.5840212 -2.1988442
[[2]] 2005-02-02 2005-04-02 2005-08-02 2005-10-02 2005-11-02
0.82720055 -0.05713144 0.29355203 1.08244510 -1.14746500
x.datezoo系列应具有唯一的索引值,因此,如果要从date转换为yearmon,则应聚合该系列以保持索引值的唯一性。比如说,
lapply(xy.list, aggregate, as.yearmon, mean)
或
如果重要的是不进行聚合,则另一种可能性是将其转换为xts系列:
library(xts)
lapply(xy.list, function(x) xts(coredata(x), as.yearmon(index(x))))
为了避免混淆,我修改了示例,使指数在月-年格式中唯一。我不想找到平均值,但是,只要使用应用函数之一更改索引的格式就行了。宾果!最后一个建议(没有汇总)回答了这个问题。这比我在失败的膝盖上尝试的更明显。从zoo对象切换到xts对象时,我必须考虑任何意外的后果。如果每年/每月最多有一个日期,则不必使用最后一个,因为平均值解决方案仍然有效,因为一个数字的平均值本身就是一个数字。如果您想强调您可以使用identity
代替mean
。
lapply(xy.list, aggregate, as.yearmon, mean)
lapply(xy.list, aggregate, as.yearmon, function(x) x[1])
library(xts)
lapply(xy.list, function(x) xts(coredata(x), as.yearmon(index(x))))