【发布时间】:2012-02-27 10:57:15
【问题描述】:
我有一个 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() 可能不是解决这个问题的方法——我不是希望上面代码的 sn-p 是一条红鲱鱼,并收到有关如何解决我在使用聚合函数时遇到的问题的答案 - IF aggregate() 不是“最佳”(即推荐的 R)方法解决这个问题。
我在上面进行尝试的唯一原因是:
- 因为我被要求发布“可重现”错误
- 为了表明我已经尝试自己先解决它,然后再在这里提问。
【问题讨论】:
-
请提供可重现的内容。
标签: r aggregate aggregation zoo