用周围环境值的平均值代替缺失值。

问题描述 投票:4回答:2

我的数据集看起来像下面(我们称它为 "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), ]
r time-series na zoo
2个回答
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

(如果第一或最后一个元素为 xNA)


2
投票

你可以通过移动平均线的1行代码来实现这一点。na.ma 的函数 推算TS 包裹

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

这将用最接近的周围值的平均值来替换缺失的值.你甚至可以额外设置参数。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.