r-将缺失的值替换为周围值的平均值



我的数据集看起来如下(让我们称之为"a"):

date value
2013-01-01 12.2
2013-01-02 NA
2013-01-03 NA
2013-01-04 16.8
2013-01-05 10.1
2013-01-06 NA
2013-01-07 12.0

我想用最接近的环境值(序列中的前一个和下一个值)的平均值来代替NA

我尝试了以下内容,但我不相信输出。。。

miss.val = which(is.na(a$value))
library(zoo)
z = zoo(a$value, a$date)
z.corr = na.approx(z)
z.corr[(miss.val - 1):(miss.val + 1), ]

使用包zoo:中的na.locf(上次观测结转)

R> library("zoo")
R> x <- c(12.2, NA, NA, 16.8, 10.1, NA, 12.0)
R> (na.locf(x) + rev(na.locf(rev(x))))/2
[1] 12.20 14.50 14.50 16.80 10.10 11.05 12.00

(如果x的第一个或最后一个元素是NA,则不起作用)

您可以使用imputeTS包的移动平均na.ma函数在1行代码中完成这一操作

library(imputeTS)
na_ma(yourData, k = 1)

这将用最接近的环境值的平均值替换缺失的值。您甚至可以额外设置参数。

na_ma(yourData, k =2, weighting = "simple")

在这种情况下,算法将在每个方向上取下两个值。您也可以选择不同的值权重(您可能希望值越接近影响越大)

最新更新