Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据帧中各因子变量的移动平均数,无前导NA';s和全因子水平为NA';s在R_R_Plyr - Fatal编程技术网

数据帧中各因子变量的移动平均数,无前导NA';s和全因子水平为NA';s在R

数据帧中各因子变量的移动平均数,无前导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)) 任何帮助都将不胜感激 使用

关于如何通过因子变量计算数据框架中的移动平均数,我还没有找到令人满意的答案。此外,我还有一个问题,即整个因子水平为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))    

任何帮助都将不胜感激

使用
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]