Replace NA with previous and next rows mean in R

前端 未结 3 1079
余生分开走
余生分开走 2020-12-06 05:41

How could I Replace a NA with mean of its previous and next rows in a fast manner?

  name grade
1    A    56
2    B    NA
3    C    70
4    D    96
         


        
3条回答
  •  悲哀的现实
    2020-12-06 06:31

    Or you may try na.approx from package zoo: "Missing values (NAs) are replaced by linear interpolation"

    library(zoo)
    x <- c(56, NA, 70, 96)
    na.approx(x)
    # [1] 56 63 70 96
    

    This also works if you have more than one consecutive NA:

    vals <- c(1, NA, NA, 7, NA, 10)
    na.approx(vals) 
    # [1]  1.0  3.0  5.0  7.0  8.5 10.0
    

    na.approx is based on the base function approx, which may be used instead:

    vals <- c(1, NA, NA, 7, NA, 10)
    xout <- seq_along(vals)
    x <- xout[!is.na(vals)]
    y <- vals[!is.na(vals)]
    
    approx(x = x, y = y, xout = xout)$y
    # [1]  1.0  3.0  5.0  7.0  8.5 10.0
    

提交回复
热议问题