数据帧中各因子变量的移动平均数,无前导NA';s和全因子水平为NA';s在R
关于如何通过因子变量计算数据框架中的移动平均数,我还没有找到令人满意的答案。此外,我还有一个问题,即整个因子水平为NA(没有一个国家或个人的数据)和非领先NA的情况(缺少最后的观察结果) 考虑:数据帧中各因子变量的移动平均数,无前导NA';s和全因子水平为NA';s在R,r,plyr,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)) 任何帮助都将不胜感激 使用
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))
任何帮助都将不胜感激 使用
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
使用NA数据的值:
library(zoo)
library(data.table)
setDT(Data)
Data[, MA.value := rollmeanr(value, 3, na.pad = TRUE), by = factor]
谢谢到目前为止,这是可行的。我如何处理一个因素水平完全不适用?现在返回一个错误。例如,将“value”替换为:value我意识到我的大多数问题都来自NA。这段代码似乎存在两个问题:一个是非前置NA(它不理解,当最后一个obs丢失时,它可以提前停止一个obs),另一个是所有NA的因子级别(它应该作为NA返回)。你介意我按照这些思路更新我的问题吗?我们可以在结合了Henk的上述做法后删除我们的评论,但不使用data.tables,试试library(zoo);ddply(数据、系数、变换、均值(值、3))
您还可以/应该指定所需的移动平均线类型。参见?选项[中间、左、右]的rollmean。谢谢!这适用于存在所有不适用因素的情况。然而,它不适用于非主要NA的情况。有解决方案吗?我更新了关于NA问题的问题,并将在解决问题后删除我的评论:-)
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
library(zoo)
library(data.table)
setDT(Data)
Data[, MA.value := rollmeanr(value, 3, na.pad = TRUE), by = factor]