我有一个 R 动物园对象。zoo 对象 (z) 按日期索引并具有多列:
- V1(聚合值是“选定”行中所有值的总和)
- V2(聚合值是“选定”行中所有值的 q1 [第一个四分位数])
- V3(聚合值是“选定”行中所有值的最小值)
- V4(聚合值是“选定”行中所有值的第一个值)
- v5(聚合值是“选定”行中所有值的最后一个值)
我想以不同的方式聚合每个“列”中的数据(即使用不同的函数),但聚合相同的行数。
我想使用一个函数进行聚合,该函数允许我指定要聚合的行数。例如:
my_aggregate <- function(data, agg_rowcount) {
# aggregate data over [agg_rowcount] rows....
return (aggregated_data)
}
我最初想通过使用恰当命名的 aggregate() 函数来实现这个函数——但我无法让它做我想做的事。
一个简单的例子解释了我使用 aggregate() 得到的错误如下:
> indices <- seq.Date(as.Date('2000-01-01'),as.Date('2000-01-30'),by="day")
> a <- zoo(rnorm(30), order.by=indices)
> b <- zoo(rnorm(30), order.by=indices)
> c <- zoo(rnorm(30), order.by=indices)
> d <- merge(a,b)
> e <- merge(d,c)
> head(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
>
> aggregate(e,by=e[[1]], nfrequency=8)
Error: length(time(x)) == length(by[[1]]) is not TRUE
所以我在第一关就失败了。在帮助我编写允许我以不同方式聚合不同列、跨越相同行数的函数时,我将不胜感激。
注意:我只是在前几天“乱搞”R。据我所知,aggregate() 可能不是解决这个问题的方法——我不希望上面的代码片段成为红鲱鱼,并收到有关如何解决我在使用聚合函数时遇到的问题的答案 - 如果聚合()不是解决此问题的“最佳”(即推荐的 R)方法。
我在上面进行尝试的唯一原因是:
- 因为我被要求发布一个“可重现”的错误
- 为了表明我已经尝试过自己先解决它,然后再在这里提问。