gpt4 book ai didi

r - 将连续 NA 减少到单个 NA 的最佳方法

转载 作者:行者123 更新时间:2023-12-04 01:47:20 26 4
gpt4 key购买 nike

我需要将向量中的连续 NA 减少到单个 NA,而不触及其他值。
因此,例如,给定一个像这样的向量:

NA NA  8  7 NA NA NA NA NA  3  3 NA -1  4

我需要得到的是以下结果:
NA  8  7 NA  3  3 NA -1  4

目前,我正在使用以下功能:
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)])
}

它似乎工作正常,但可能有一种更简单/更快的方法来完成这项任务。

有什么建议 ?

提前致谢。

最佳答案

这是一个想法:

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

关于r - 将连续 NA 减少到单个 NA 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com