使用rollmean基于行位置填充尾随变量

时间:2017-09-10 03:26:13

标签: r loops apply zoo

我想知道是否有办法调整rollmean包中的zoo函数如何处理尾随变量(或者可能是另一个累积类型的滚动均值函数)。假设我有以下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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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")