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))))