R - 递增顺序上的插值整数值

时间:2018-03-19 18:08:19

标签: r interpolation intervals na data-processing

我有一个数据框,其累计数字缺少值:

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

我想用尽可能统一/分布的整数填补空白。例如:

  • 如果我们在5到10之间有3个空格,我们可以有(6,8,9);
  • 如果我们在4到11之间有4个空格,我们可以有(5,7,8,10)或(5,7,9,10)。

我知道这个功能无法解决:

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

如何处理所有缺失值?

2 个答案:

答案 0 :(得分:0)

考虑到数据框开头/结尾的缺失值有特殊处理,我们可以将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

答案 1 :(得分:0)

您可以仅使用 na.interpolation 中的imputeTS na.approx 中的zoo

示例:

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

只需要上限,因为从问题开始者开始就不需要小数位。