【问题标题】:remove a row containing missing value in specific columns in R [duplicate]删除R中特定列中包含缺失值的行[重复]
【发布时间】:2014-02-27 06:53:47
【问题描述】:

我想删除一些在特定列中包含缺失值的行。例如,

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2   NA    3    3   NA    3
[2,]   NA   NA   NA   NA   NA    1
[3,]   NA    2   NA   NA    1    1
[4,]    2    3    1    3    2    1
[5,]   NA   NA   NA   NA   NA    2
[6,]    1    1    3    1    2    3

现在我想从第 1 列到第 5 列删除一些包含所有缺失值的行。在这种情况下,我应该删除第 2 行和第 5 行。因此,数据框变成了

   [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2   NA    3    3   NA    3
[2,]   NA    2   NA   NA    1    1
[3,]    2    3    1    3    2    1
[4,]    1    1    3    1    2    3

如何处理?提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用rowSums的另一个变体:

    M[!rowSums(is.na(M[ , 1:5])) == 5, ]
    
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,]    2   NA    3    3   NA    3
    # [2,]   NA    2   NA   NA    1    1
    # [3,]    2    3    1    3    2    1
    # [4,]    1    1    3    1    2    3
    

    为了更好地了解正在发生的事情,从最里面的函数开始逐步添加函数通常很有用,例如:

    is.na(M[ , 1:5]) # or even just M[ , 1:5]... 
    rowSums(is.na(M[ , 1:5]))
    rowSums(is.na(M[ , 1:5])) == 5
    !rowSums(is.na(M[ , 1:5])) == 5
    

    【讨论】:

      【解决方案2】:

      首先,我重新创建您的数据并将它们存储为M

      M <- matrix(c(2, NA,3,3,NA,3,NA,NA,NA,NA,NA,1,NA,2,NA,NA,1,1,2,3,1,3,2,1,NA,NA,NA,NA,NA,2,1,1,3,1,2,3), ncol=6, byrow=T)
      

      现在下一点可能更难理解:

      首先我找出哪些行满足条件,即第 1 到第 5 列中有 NA 值。

      apply(M[,1:5],1,function(x) {all(is.na(x))} )
      [1] FALSE  TRUE FALSE FALSE  TRUE FALSE
      

      然后我选择其他行(我把!放在上面一行的前面)

      M[!apply(M[,1:5],1,function(x) {all(is.na(x))} ),]
           [,1] [,2] [,3] [,4] [,5] [,6]
      [1,]    2   NA    3    3   NA    3
      [2,]   NA    2   NA   NA    1    1
      [3,]    2    3    1    3    2    1
      [4,]    1    1    3    1    2    3
      

      【讨论】:

      • 这里略有不同:M[!apply(M, 1, function(i) all(1:5 %in% which(is.na(i)))),]
      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多