我需要将矢量中的连续NA减少到单个NA,而不触及其他值.
所以,例如,给定一个这样的向量:
NA NA 8 7 NA NA NA NA NA 3 3 NA -1 4
Run Code Online (Sandbox Code Playgroud)
我需要得到的是以下结果:
NA 8 7 NA 3 3 NA -1 4
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用以下功能:
reduceConsecutiveNA2One <- function(vect){
enc <- rle(is.na(vect))
# helper func
tmpFun <- function(i){
if(enc$values[i]){
data.frame(L=c(enc$lengths[i]-1, 1), V=c(TRUE,FALSE))
}else{
data.frame(L=enc$lengths[i], V=enc$values[i])
}
}
Df <- do.call(rbind.data.frame,lapply(1:length(enc$lengths),FUN=tmpFun))
return(vect[rep.int(!Df$V,Df$L)])
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但可能有一个更简单/更快的方法来完成这项任务.
有什么建议 ?
提前致谢.
Jos*_*ien 13
这是一个想法:
x <- c(NA, NA,8,7,NA, NA, NA, NA, NA, 3, 3, NA, -1, 4)
x[!(is.na(x) & diff(c(FALSE, is.na(x)))==0)]
# [1] NA 8 7 NA 3 3 NA -1 4
## It also works for length-one vectors
x <- NA
x[!(is.na(x) & diff(c(FALSE, is.na(x)))==0)]
# [1] NA
Run Code Online (Sandbox Code Playgroud)