代码之家  ›  专栏  ›  技术社区  ›  Spacedman

将NAs重新插入向量

  •  6
  • Spacedman  · 技术社区  · 15 年前

    我有一个包含NAs的值向量。这些值需要由一个不能处理NAs的外部程序处理,因此它们被剥离,写入一个文件,处理,然后再读回,从而得到一个非NAs数量的长度向量。例如,假设输入是734na546na1na,那么输出就是7个值。我需要做的是将NAs重新插入到位。

    所以,给定两个向量X和Y:

     > X
     [1]  64   1   9 100  16  NA  25  NA   4  49  36  NA  81
     > Y
     [1]  8  1  3 10  4  5  2  7  6  9
    

    生产:

    8 1 3 10 4 NA 5 NA 2 7 6 NA 9
    

    (你可能会注意到X是Y^2,这只是一个例子)。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Joris Meys    15 年前

    同一主题的另一个变体

    rena <- function(X,Z){
        X[which(!is.na(X))]=Z    
        X
    }
    

    编辑:马雷克更正。

        2
  •  5
  •   Joshua Ulrich    15 年前

    na.omit 保留 NA 在原始系列中,因此您可以使用它来知道将丢失的值放在何处:

    Y <- sqrt(na.omit(X))
    Z <- rep(NA,length(Y)+length(attr(Y,"na.action")))
    Z[-attr(Y,"na.action")] <- Y
    #> Z
    # [1]  8  1  3 10  4 NA  5 NA  2  7  6 NA  9
    
        3
  •  4
  •   Spacedman    15 年前

    rena <- function(X,Z){
    Y=rep(NA,length(X))
    Y[!is.na(X)]=Z    
    Y
    }
    
        4
  •  4
  •   Charles    15 年前

    也可以尝试替换:

    replace(X, !is.na(X), Y)
    
    推荐文章