我有一个数据框,其累计数字缺少值:
data.frame(a=1:9, b=c(14,17,NA,20,25,29,NA,NA,41))
我想用尽可能统一/分布的整数填补空白。例如:
我知道这个功能无法解决:
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
如何处理所有缺失值?
答案 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))
只需要上限,因为从问题开始者开始就不需要小数位。