【问题标题】:Backwards rollapply with zoo object与动物园对象向后滚动
【发布时间】:2019-07-14 08:41:59
【问题描述】:

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

> 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 

我如何以 DESCENDING 顺序滚动应用mean? (请不要在应用常规 rollapply 后反转结果的解决方案)

我希望我的输出看起来像:

 d   c   b 
3.5 2.5 1.5 

【问题讨论】:

    标签: r zoo


    【解决方案1】:

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

    此外,问题中以v &lt;- 开头的行不太可能是想要的,因为它似乎要求混合数字和字符数据。修复该行并按照我们显示的顺序创建一个数据框:

    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
    

    【讨论】:

    • 感谢您教我创建动物园对象的正确方法。我一直做错了。从现在开始将使用read.zoo 方法。那么rollapply 从头到尾,rollapplyr 从头到尾(即反向)?
    • v &lt;- zoo(df$col1, df$col2) 也可以。第一个参数只能是数据,不能是数据和索引。 rollapplyr 末尾的 r 将对齐指定为“右”(与“center”相反,如果末尾没有 r,则默认为“center”)。既不向后工作。请参阅 ?rollapply
    • 我不太明白align 是什么意思。我已阅读文档,但不确定它告诉我什么。
    • 如果 y
    • 有一个rev.zoo方法。
    【解决方案2】:

    根据 G. Grothendieck:

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

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2011-12-14
      • 2020-01-19
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多