如何将缺失行和内插值添加到 R 中的数据框?

How do I add missing rows AND interpolated value to a data frame in R?

我有一个 table 这样的数据:

dat <- data.frame(
   age  = c(0,10,20,40,70,100),
   surv = c(1.0,0.9,0.8,0.6,0.3,0.0)
)

我想为每个缺失的年龄 (30,50,60,80,90) 添加一行,然后我想将 surv 的线性插值添加到新行。所以新行将是 (30,0.7) (80, 0.2) 等等

这只是一个例子。我实际上正在处理一个更大的数据集,从 0 到 5,000,000 x 10(有很多缺失的行)所以我需要一些自动化。

感谢您的帮助!

这是一种快速 "dirty" 添加行的方法。虽然这不会按顺序插入年龄,但您可以稍后进行排序并替换之前缺失的行的值。

代码如下:

 df <- data.frame(age=c(0,10,20,40,70,100), surv=c(1.0,0.9,0.8,0.6,0.3,0.0))
 addrow <- c(30,50,60,80,90)

 df_save <- df
 i = 1

 for (r in c(1:nrow(df) ))  {

     if (addrow[i] %in% df[,1] ) {
        print(paste("TRUE", , sep=":"))
     } else {
       if (i <= length(addrow) ) {
          newrow <- c(addrow[i], 999)
          df <- rbind(df[1:r,], newrow, df[(r+1):nrow(df),])
       }
     }
     i = i+1
 }

df[order[df$age],)

然后将 999 值替换为相应年龄的生存值。

这是为了让您了解如何自动进行行绑定。

制作主数据集然后使用approx进行线性插值:

newdat <- merge(data.frame(age=seq(0,100,10)),dat,all=TRUE)
newdat$surv[is.na(newdat$surv)] <- 
    with(newdat, approx(age, surv, xout=age)$y)[is.na(newdat$surv)]

newdat

#   age surv
#1    0  1.0
#2   10  0.9
#3   20  0.8
#4   30  0.7
#5   40  0.6
#6   50  0.5
#7   60  0.4
#8   70  0.3
#9   80  0.2
#10  90  0.1
#11 100  0.0