插值NA值

hlo*_*dal 15 interpolation r

我有两组与时间无关的样本.我想合并它们并计算我没有两者值的时间的缺失值.简化示例:

A <- cbind(time=c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100),
           Avalue=c(1, 2, 3, 2, 1, 2, 3, 2, 1, 2))
B <- cbind(time=c(15, 30, 45, 60), Bvalue=c(100, 200, 300, 400))
C <- merge(A,B, all=TRUE)

   time Avalue Bvalue
1    10      1     NA
2    15     NA    100
3    20      2     NA
4    30      3    200
5    40      2     NA
6    45     NA    300
7    50      1     NA
8    60      2    400
9    70      3     NA
10   80      2     NA
11   90      1     NA
12  100      2     NA
Run Code Online (Sandbox Code Playgroud)

通过假设每个样本之间的线性变化,可以计算缺失的NA值.直觉上很容易看出时间15和45的A值应该是1.5.但是例如在时间20处对B的适当计算将是

100 +(20 - 15)*(200 - 100)/(30 - 15)

等于133.33333.第一个括号是估计时间和最后一个可用样本之间的时间.第二个括号是最近的样本之间的差异.第三个括号是最近样本之间的时间.

如何使用R计算NA值?

Ana*_*liy 16

使用zoo包:

library(zoo)
Cz <- zoo(C)
index(Cz) <- Cz[,1]
Cz_approx <- na.approx(Cz)
Run Code Online (Sandbox Code Playgroud)

  • 注意,将数据帧转换为zoo也可以写成`Cz < - read.zoo(C)`,它自动假定第一列保存时间.动物园的'na.approx`也有一个默认的方法,适用于普通的矢量,所以即使不将`C`转换成动物园,我们也可以这样做:`C $ Bvalue < - na.approx(C $ Bvalue,C $ time,na. rm = FALSE)` (7认同)
  • 可能会考虑在该命令周围添加一个"na.fill(na.approx(Cz),"extend")`,因此前导和尾随的NA不会造成额外的困难. (2认同)