R zoo对象时间序列聚合

R zoo对象时间序列聚合,r,aggregate,aggregation,zoo,R,Aggregate,Aggregation,Zoo,我有一个R-zoo对象。zoo对象(z)按日期编制索引,并具有多列: V1(聚合值是“选定”行中所有值的总和) V2(聚合值为“选定”行中所有值的q1[第一个四分位数]) V3(聚合值是“选定”行中所有值的最小值) V4(聚合值是“选定”行中所有值的第一个值) v5(聚合值是“选定”行中所有值的最后一个值) 我希望以不同的方式(即使用不同的函数)聚合每个“列”中的数据,但聚合的行数相同 我想使用一个函数进行聚合,该函数允许我指定要聚合的行数。例如: my_aggregate <- fu

我有一个R-zoo对象。zoo对象(z)按日期编制索引,并具有多列:

  • V1(聚合值是“选定”行中所有值的总和)
  • V2(聚合值为“选定”行中所有值的q1[第一个四分位数])
  • V3(聚合值是“选定”行中所有值的最小值)
  • V4(聚合值是“选定”行中所有值的第一个值)
  • v5(聚合值是“选定”行中所有值的最后一个值)
我希望以不同的方式(即使用不同的函数)聚合每个“列”中的数据,但聚合的行数相同

我想使用一个函数进行聚合,该函数允许我指定要聚合的行数。例如:

my_aggregate <- function(data, agg_rowcount) {
  # aggregate data over [agg_rowcount] rows....
  return (aggregated_data)
}
my_综合指数a b c d e头(e)
a、b、c
2000-01-01 -0.07924078  0.6208785 -1.79826472
2000-01-02  1.15956208  1.1867218 -0.02124817
2000-01-03  0.20427523  0.3164863 -0.20153631
2000-01-04  1.21583902 -1.3728278  1.75872854
2000-01-05 -0.32845708  0.3857658 -1.01082787
2000-01-06 -1.95312879 -0.3824591 -1.33220075
>
>聚合(e,by=e[[1]],NfFrequency=8)
错误:length(time(x))==length(by[[1]])不是真的
所以我在第一关就失败了。如果您能帮助我编写一个函数,使我能够以不同的方式聚合不同的列,包括相同数量的行,我将不胜感激

注意:我刚刚开始与R“混日子”。据我所知,aggregate()可能不是解决这个问题的方法-我不想让上面的代码片段成为一条红鲱鱼,如果aggregate()不是解决方法,我会收到关于如何解决使用aggregate函数时遇到的问题的答案解决此问题的“最佳”(即推荐的R)方法

我将上述尝试包括在内的唯一原因是:

  • 因为我被要求发布一个“可复制”的错误
  • 来证明我在这里询问之前,先自己解决了这个问题

  • 假设我们希望每周聚合
    e
    w
    ,使用
    sum
    聚合列
    a
    b
    使用
    mean
    c
    使用一周中的最后一个值:

    w <- as.numeric(format(time(e), "%W"))
    e.w <- with(e, cbind(a = aggregate(a, w, sum), 
        b = aggregate(b, w, mean), 
        c = aggregate(c, w, tail, 1)
    ))
    

    wplyr包中的ddply函数在这里是否有帮助

    要按多个列进行聚合,请执行以下操作:

    names(e)[1] = 'group'
    agg = ddply(e, c("group"), function(df) { 
        c( sum(df$a), mean(df$b), tail(df$c) ) 
    })
    names(agg) = c('group', 'a', 'b', 'c')
    

    请提供一些可复制的内容。@GGrothendiek:这正是我想继续进行的方式……很高兴知道我走在了正确的轨道上。不过最后一件事是,我想按天进行聚合,将天数作为正整数传递给函数。我不清楚如何修改您的代码段来执行此操作。你能告诉我如何用数字代替字符串表示法(例如用7代替“W”)进行聚合吗?在
    http://cran.r-project.org/web/packages/zoo/vignettes/zoo-quickref.pdf
    @GGrothendiek:我可能在这里遗漏了一些想法……我查看了nextfri函数。我可以看到它如何用于道琼斯指数聚合,但我看不到它如何用于按行数聚合(即,不考虑一周中的哪一天)。例如,如果我想在3天内聚合数据,我不确定nextfri示例有何帮助。@Homunculus,如果您要在数据集中查找所有星期日的总和/平均数/尾部,那么第二行是所有星期一的总和/平均数/尾部,依此类推,然后将
    %W
    替换为
    %W
    @GGrothendiek:我的聚合逻辑是DOW(一周中的某一天)不可知。它根据指定的行数进行聚合,而不关心一周中的哪一天。数据毕竟是不规则的,因此数据中可能会缺少某些天。我所要做的就是能够进行汇总(即聚合)数据基于一个间隔,该间隔指定数据聚合的天数。
    names(e)[1] = 'group'
    agg = ddply(e, c("group"), function(df) { 
        c( sum(df$a), mean(df$b), tail(df$c) ) 
    })
    names(agg) = c('group', 'a', 'b', 'c')