函数na.approx拒绝字符

时间:2018-04-17 05:55:22

标签: r interpolation

我只想使用“常量”方法进行插值,但是近似函数似乎不支持字符我能做什么。

  library(zoo)     
  na.approx(c('a', NA, NA,'b', NA, NA,'a', NA, NA, NA, NA), 
            maxgap = 3,
            method = "constant")
  # should return : c('a', 'a', 'a','b', 'b', 'b','a', NA, NA, NA, NA)

相反,它会给出错误消息:

  

大约有误差(x [!na],y [!na],xout,...):零非NA点

1 个答案:

答案 0 :(得分:2)

修改

您应该使用na.locf

na.locf(x, maxgap = 3, na.rm = FALSE)
 [1] "a" "a" "a" "b" "b" "b" "a" NA  NA  NA  NA 

原始答案

na.approx只接受数字向量。但您可以手动执行此操作:

na.approx.char.con <- function(x, maxgap){
    ave(x, cumsum(!is.na(x)), FUN = function(x){
        if(length(x) > maxgap + 1){
            x
        }else{
            rep(x[1], length(x))
        }
    })
}

x <- c('a', NA, NA,'b', NA, NA,'a', NA, NA, NA, NA)
na.approx.char.con(x, maxgap = 3)
# [1] "a" "a" "a" "b" "b" "b" "a" NA  NA  NA  NA