函数 na.approx 拒绝字符
Function na.approx refuses character
我只想使用 "constant" 方法进行插值,但 approx 函数似乎不支持字符,我该怎么办。
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)
而是给出错误信息:
Error in approx(x[!na], y[!na], xout, ...) : zero non-NA points
编辑
你应该使用 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
我只想使用 "constant" 方法进行插值,但 approx 函数似乎不支持字符,我该怎么办。
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)
而是给出错误信息:
Error in approx(x[!na], y[!na], xout, ...) : zero non-NA points
编辑
你应该使用 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