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