R - 对递增顺序的整数值进行插值

R - Interpolate Integer Values on the Increasing Order

我有一个数据框,其中累积的数字有缺失值:

data.frame(a=1:9, b=c(14,17,NA,20,25,29,NA,NA,41))

我想用 整数 尽可能 uniform/distributed 来填补空白。例如:

我知道这个函数不能解决:

seq(30, 40 ,length.out = 2)
# [1] 30 40

因此,数据框的预期输出可能是:

a  b
1 14
2 17
3 19
4 20
5 25
6 29
7 33
8 37
9 41

如何处理所有缺失值?

考虑到数据框 beginning/ending 上的缺失值有特殊处理,我们可以使用 approx 和唯一坐标:

df <- data.frame(a=1:9, b=c(14,17,NA,20,25,29,NA,NA,41))

missing.pos <- which(is.na(df$b))

l <- approx(x=df$b, xout = missing.pos, method = "linear") 

df$b[missing.pos] <- ceiling(l$y)

df$b
# [1] 14 17 19 20 25 29 33 37 41

您可以只使用 imputeTS 中的 na.interpolationzoo[=23 中的 na.approx =]

示例:

library("imputeTS")
x <- data.frame(a=1:9, b=c(14,17,NA,20,25,29,NA,NA,41))
ceiling(na.interpolation(x))

刚好需要上限,因为问题开头不需要小数。