用平滑样条曲线替换所有NA值

5
以下是样本数据(约8000行数据中的一部分)。我该如何用剩余数据的平滑样条拟合值替换所有NA值?
Date            Max Min Rain    RHM RHE
4/24/1981   35.9    24.7    0.0 71  37
4/25/1981   36.8    22.8    0.0 62  40
4/26/1981   36.0    22.6    0.0 47  37
4/27/1981   35.1    24.2    0.0 51  39
4/28/1981   35.4    23.8    0.0 61  47
4/29/1981   35.4    25.1    0.0 67  43
4/30/1981   37.4    24.8    0.0 72  34
5/1/1981      NA      NA     NA NA  NA
5/2/1981    39.0    25.3     NA NA  55
5/3/1981    35.9    23.0    0.0 68  66
5/4/1981    28.4    22.4    0.7 70  30
5/5/1981    35.5    24.6    0.0 47  31
5/6/1981    37.4    25.5    0.0 51  31
2个回答

6

您可能需要查看 zoo 包中的 na.spline 函数。 它似乎是专门为此目的而设计的。

缺失值(NAs)将分别通过 approx 线性插值或 spline 三次样条插值来替换。


2

为了回答这个问题,我使用了一些简化的数据。看这个数据集:

dat <- structure(list(x = c(1.6, 1.6, 4.4, 4.5, 6.1, 6.7, 7.3, 8, 9.5, 
9.5, 10.7), y = c(2.2, 4.5, 1.6, 4.3, NA, NA, 4.8, 7.3, 8.7, 6.3, 12.3)),
.Names = c("x", "y"), row.names = c(NA, -11L), class = "data.frame")

当使用plot(dat,type="o",pch=19)绘制时,结果如下图所示:

enter image description here

现在对没有NA值的数据进行平滑样条拟合。

smoo <- with(dat[!is.na(dat$y),],smooth.spline(x,y))

然后预测 xy 值,其中 y 当前为 NA

result <- with(dat,predict(smoo,x[is.na(y)]))
points(result,pch=19,col="red")

图片描述

要将值填充回原始数据,您可以执行以下操作:

dat[is.na(dat$y),] <- result

我本来也会这样做,但你起得比我早 :-) 。唯一需要澄清的是,原帖作者需要确保对于数据框中的每一列,都针对相应的自变量运行样条拟合。 - Carl Witthoft
@thelatemail。晚回复了- 它运行良好。ToT Man :-) - Mudit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接