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 来填补空白。例如:
- 如果我们在 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
如何处理所有缺失值?
考虑到数据框 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.interpolation
或 zoo
[=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))
刚好需要上限,因为问题开头不需要小数。
我有一个数据框,其中累积的数字有缺失值:
data.frame(a=1:9, b=c(14,17,NA,20,25,29,NA,NA,41))
我想用 整数 尽可能 uniform/distributed 来填补空白。例如:
- 如果我们在 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
如何处理所有缺失值?
考虑到数据框 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.interpolation
或 zoo
[=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))
刚好需要上限,因为问题开头不需要小数。