向后滚动与动物园对象

时间:2019-02-20 15:40:21

标签: r zoo

假设我有一个动物园对象:

> df <- data.frame(col1=c(1,2,3,4), col2=c("a","b","c","d"))
> v <- zoo(df, order.by = df$col2)
> v
col1 col2
a 1    a   
b 2    b   
c 3    c   
d 4    d   

我可以将平均值计算为:

> rollapply(v, 2, by.column = F, function(x) { mean(as.numeric(x[,"col1"])) })
 a   b   c 
1.5 2.5 3.5 

如何按降序顺序应用mean? (请在没有应用任何解决方案的情况下,在应用常规rollapply之后只是反转结果)

我希望输出如下:

 d   c   b 
3.5 2.5 1.5 

2 个答案:

答案 0 :(得分:2)

动物园中的oo代表有序观测值,此类对象始终按索引排序;但是,问题中显示的内容不是按索引排序的,因此它不能是有效的Zoo对象。

此外,问题中v <-开头的行不太可能需要什么,因为它似乎要求混合使用数字和字符数据。修复该行并按照显示的顺序创建数据框:

library(zoo)

v <- read.zoo(df, index = "col2", FUN = c)
r <- rollapplyr(v, 2, mean)
fortify.zoo(r)[length(r):1, ]

给予:

  Index   r
3     d 3.5
2     c 2.5
1     b 1.5

答案 1 :(得分:0)

每G. Grothendieck:

rollapply(rev.zoo(v), 2, by.column = F, function(x) { mean(as.numeric(x[,"col1"])) })