【问题标题】:Fill in trailing variables based on row position using rollmean使用rollmean根据行位置填充尾随变量
【发布时间】:2018-02-18 14:12:44
【问题描述】:

我想知道是否有一种方法可以调整 zoo 包中的 rollmean 函数如何处理尾随变量(或者可能是另一个累积型滚动平均函数)。假设我有以下data.frame:

df <- as.data.frame(as.matrix(sample(1:10), ncol = 3))
df$roll <- rollmean(df$V1, 5, fill = NA, align = "right")
df

   V1  roll
1   2   NA
2   7   NA
3   6   NA
4   1   NA
5   9  5.0
6   5  5.6
7  10  6.2
8   3  5.6
9   4  6.2
10  8  6.0

我知道我可以使用 fill = "extend"rollmean 之类的东西来获取所有尾随变量的平均值,但是有没有办法调整这种扩展方法,以便每个尾随变量根据行位置累积?所以我想要的是类似于下面的 df,其中df$roll 的第 4 行有一个 4 行滚动窗口,第 3 行有一个 3 行滚动窗口,依此类推。

   V1  roll
1   2   NA
2   7  4.5
3   6  5.0
4   1  4.0
5   9  5.0
6   5  5.6
7  10  6.2
8   3  5.6
9   4  6.2
10  8  6.0

有什么想法吗?

【问题讨论】:

    标签: r loops apply zoo


    【解决方案1】:

    rollapply(和默认为右对齐的rollapplyr)支持partial = TRUE 参数。见?rollapply

    transform(df, roll = rollapplyr(V2, 5, mean, partial = TRUE))
    

    给予:

       V1 V2 roll
    1   1  2  2.0
    2   2  7  4.5
    3   3  6  5.0
    4   4  1  4.0
    5   5  9  5.0
    6   6  5  5.6
    7   7 10  6.2
    8   8  3  5.6
    9   9  4  6.2
    10 10  8  6.0
    

    注意:要使生成输入的代码可重现,必须使用set.seed(...)。由于没有这样做,我们使用了这个:

    df <- structure(list(V1 = 1:10, V2 = c(2L, 7L, 6L, 1L, 9L, 5L, 10L, 
    3L, 4L, 8L)), .Names = c("V1", "V2"), row.names = c(NA, -10L), class = "data.frame")
    

    【讨论】:

    • 对不起,我不应该在原始问题中使用sample(),但这正是我想要的!非常感谢。
    • 另外,为了我的实际目的,我能够将rollapplyr(V2, 5, mean, partial = TRUE)) 行放入我正在工作的dplyr 链中,效果很好。
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2019-10-21
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2021-12-12
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多