我的数据集如下所示(我们称之为“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),]
答案 0 :(得分:3)
使用na.locf
包中的zoo
(上次观察结果):
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
)
答案 1 :(得分:0)
您可以使用 imputeTS 软件包的移动平均值 na.ma 功能在1行代码中完全做到这一点
library(imputeTS)
na.ma(yourData, k = 1)
这将丢失的值替换为最接近的环境值的平均值。 您甚至可以额外设置参数。
na.ma(yourData, k =2, weighting = "simple")
在这种情况下,算法将在每个方向上取下两个值。您还可以选择不同的值权重(您可能希望值越接近越有影响力)