数据框中的移动平均数按因子变量,非领先NA和整个因子水平为R中的NA' s

时间:2014-09-04 14:48:53

标签: r plyr

我还没有找到关于如何通过因子变量计算数据框中的移动平均线的令人满意的答案。此外,我的问题是整个因子水平为NA(一个国家或个人没有数据)和非领先NA的情况(最后一次观察缺失)。

考虑:

value <- c(rep(NA,4),1,2,3,NA,5:8)
factor <- c(rep("a",4), rep("b",4),rep("c",4))
Data <- as.data.frame(cbind(value,factor))    

我希望在3次观测中得到(右对齐)移动平均线。对于软件包感到抱歉,但在我看来,这应该与ddply函数一起使用:

library(TTR) # for moving averages
library(plyr) # for ddply
Data <- ddply(Data,"factor",MAvalue = SMA(value, n=3)) 

结果应如下所示:

value    factor    MAvalue
NA       a         NA
NA       a         NA
NA       a         NA
NA       a         NA # this factor has no data
1        b         NA
2        b         NA
3        b         2
NA       b         NA # this factor is missing the last observation
5        c         NA
6        c         NA
7        c         6
8        c         7 # this factor has complete information

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

使用NA数据:

library(zoo)
library(data.table)

setDT(Data)
Data[, MA.value := rollmeanr(value, 3, na.pad = TRUE), by = factor]

答案 1 :(得分:2)

使用cbind时,它会将所有数据转换为字符。试试这个。

value <- c(1:12)
factor <- c(rep("a",6), rep("b",6))
Data <- data.frame(factor = factor,
                      value = value)

ddply(Data, .(factor), transform, MAValue = SMA(value, 3))

   factor value MAValue
1       a     1      NA
2       a     2      NA
3       a     3       2
4       a     4       3
5       a     5       4
6       a     6       5
7       b     7      NA
8       b     8      NA
9       b     9       8
10      b    10       9
11      b    11      10
12      b    12      11