【发布时间】:2020-03-06 12:06:11
【问题描述】:
我有一个在边界处包含 NA 的向量
x <- c(NA, -1, 1,-1, 1, NA, -1, 2, NA, NA)
我希望结果是:
c(-3, -1, 1,-1, 1, 0, -1, 2, 5, 8)
换句话说,我想用线性插值填充内部和边界 NA(也许我不能称之为“inter-polation”,因为 NA 在边界处)。
我尝试了包“zoo”中的一个函数,na.fill(x,“extend”),但边界输出不是我想要的,它只是重复最左边或最右边的非NA值:
na.fill(x,"extend")
输出是
[1] -1 -1 1 -1 1 0 -1 2 2 2
我还检查了其他用于填充 NA 的函数,例如 na.approx()、na.locf() 等,但它们都不起作用。
na.spline 确实有效,但边界 NA 的输出会导致非常大的变化。
na.spline(x)
输出是:
[1] -15.9475983 -1.0000000 1.0000000 -1.0000000 1.0000000 0.3400655 -1.0000000 2.0000000
[9] 13.1441048 35.9323144
边界点太大。谁能帮我吗?提前致谢!
【问题讨论】:
-
我怀疑是否会有满足您期望的现有答案。您似乎希望使用内部 NA 的侧翼非缺失值的方法以及两个相邻非缺失值的差异来扩展末端的 NA 位置。这不是一个真正的标准程序,所以我认为如果你想要一个准确的响应,你需要更仔细地指定规则......也就是说,如果我对要使用的规则的猜测是正确的。
-
你是对的。我想要的是填充 NA 现有的内部和外部位置(即边界点)。 1)对于内部点,使用线性插值是合理的,可以在几个包中找到。 2)但是,对于外部点,我没有找到标准解决方案,所以我建议使用类似于“线性插值”的方法,使用来自最近的两个非 NA 数据点的信息。这种方法肯定不够合理。
-
...另请参阅上面的链接:“我想根据之前/之后的两个观察结果使用线性近似来推断边界 [..]”,由
zoo的作者回答。
标签: r na zoo linear-interpolation