【问题标题】:Add missing value in column according to value of previous or next row in R根据R中上一行或下一行的值在列中添加缺失值
【发布时间】:2020-02-19 18:54:41
【问题描述】:

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

  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))

感谢您的任何建议!

【问题讨论】:

    标签: r imputation


    【解决方案1】:

    您可以使用approxfunave 中添加缺失值,以进行如下分组:

    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
    

    【讨论】:

      【解决方案2】:

      按 id 分组,向下填充值,然后向上填充。我想这就是你需要的。

      library(dplyr)
      library(tidyr)
      
      res <- dat %>% 
        group_by(id) %>% 
        fill(b6, .direction = "down") %>% 
        fill(b6, .direction = "up")
      

      【讨论】:

      • 我觉得你也可以.direction = "downup"
      猜你喜欢
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      相关资源
      最近更新 更多