1

我有一个带有 NA 的 data.frame,我想将它们相对于它们在 data.frame 中的位置合并,最后如果连续丢失所有内容,则使用我提供的一些任意值:

我想出了这段代码,它在提供的...参数上递归地工作。我很确定有一个更好的主意,或者一个内置函数。

coalesce <- function(x,...) {

  fillerList <- list(...)
    y <- try(y <- unlist(..1))
    if(class(y)=="try-error" | length(y)==0L) {
        x <- x 
    }
    else if(length(y)==1L) {
     x[is.na(x)] <- y
    }
    else {
     x[is.na(x)] <- y[is.na(x)]
    }
    # recursion
    if(length(fillerList)-1L<=0L) {return(x)}
    else {return(coalesce(x,fillerList[-1]))}
}
4

1 回答 1

1

我的misc 包coalesce.na中有一个现成的实现。安装使用

library(devtools)
install_github("krlmlr/kimisc")

并像在您的实现中一样使用它。

我对链接问题的回答中可以看出,它在运行时与其他解决方案相比具有竞争力,并提供额外的功能,例如允许使用不同长度的向量。

于 2013-11-29T09:17:41.747 回答