首页 > 解决方案 > 根据R中上一行或下一行的值在列中添加缺失值

问题描述

我有一些纵向数据,需要通过一些规则来估算缺失值:

  1. 如果缺少一个人的第一个后续数据,则添加下一行的值;

  2. 如果缺少一个人的非首行后续数据,则将上一行的值相加;

  3. 如果缺少多个连续的后续数据,则添加上一个非缺失行的值。

这是一个例子,

dat<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(NA,1,1,1,1,1,1,1,1,1,NA,3,NA,NA,5,5,5,5,3,NA,NA))
dat_imputed<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(1,1,1,1,1,1,1,1,1,1,1,3,3,5,5,5,5,5,3,3,3))

感谢您的任何建议!

标签: rimputation

解决方案


您可以使用approxfun在内部添加缺失值ave进行分组,例如:

dat$b6 <- ave(dat$b6, dat$id, FUN=function(x)
   approxfun(x, method = "constant", rule=2)(seq_along(x)))
identical(dat, dat_imputed)
#[1] TRUE

推荐阅读