Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
R 列具有NA值时使用ZOO的滚动平均值_R - Fatal编程技术网

R 列具有NA值时使用ZOO的滚动平均值

R 列具有NA值时使用ZOO的滚动平均值,r,R,我使用data.table和zoo计算了滚动平均值 下面的代码:我在包含NA行的artprice列上计算 library(data.table) library(zoo) rollmean1 <- data.table(newdf) rollmean2 <- (rollmean1)[, paste0('MA',126) := lapply(126, function(x) rollmeanr(artprice, x, fill = NA))][] 请注意,artprice列中大部分

我使用data.table和zoo计算了滚动平均值

下面的代码:我在包含NA行的artprice列上计算

library(data.table)
library(zoo)
rollmean1 <- data.table(newdf)
rollmean2 <- (rollmean1)[, paste0('MA',126) := lapply(126, function(x) rollmeanr(artprice, x, fill = NA))][]
请注意,artprice列中大部分是NA值,但是,我想忽略它们,仍然运行滚动平均值。但是,我不希望我的artprice数据删除所有NAs,也不希望它与日期列不匹配

有没有关于如何实现的想法? 我倾向于这样的东西,因为它承认有NA值,但继续计算:(x[!is.NA(x)])

数据帧rollmean1有7616行

> nrow(rollmean1)
[1] 7616
和输出表的nrow:

> nrow(rollmean2)
[1] 7616

因此,滚动计算将在MA126的基础上进行。这意味着只有在第126行留下数据集开头未填充的125行时,才能开始实际计算。它认识到了这一事实,但仍然没有输出我想要的结果。

rollappyr(x,width,mean,na.rm=TRUE,fill=na)
好的,我如何将rollappy应用到上面的行?
> rollmean2 <- (rollmean1)[, paste0('MA',126) := lapply(126, rollapplyr, data=artprice, mean, rm.na = TRUE, Fill = NA)][]
Warning message:
In `[.data.table`((rollmean1), , `:=`(paste0("MA", 126), lapply(126,  :
  Supplied 7491 items to be assigned to 7616 items of column 'MA126' (recycled leaving remainder of 125 items).
> tail(rollmean2)
     spdate SP500close artprice MA126
1: 20170524    2404.39       NA    NA
2: 20170525    2415.07       NA    NA
3: 20170526    2415.82       NA    NA
4: 20170530    2412.91       NA    NA
5: 20170531    2411.80       NA    NA
6: 20170601    2430.06       NA    NA
 Warning message:
    In `[.data.table`((rollmean1), , `:=`(paste0("MA", 126), lapply(126,  :
      Supplied 7491 items to be assigned to 7616 items of column 'MA126' 
> nrow(rollmean1)
[1] 7616
> nrow(rollmean2)
[1] 7616