【问题标题】:Questions about missing data关于缺失数据的问题
【发布时间】:2010-11-26 13:57:52
【问题描述】:

在一个矩阵中,如果有一些缺失的数据记录为`NA。

  • 如何删除矩阵中带有NA 的行?
  • 我可以使用na.rm吗?

【问题讨论】:

    标签: r matrix na


    【解决方案1】:

    如果要删除包含 NA 的行,可以使用 apply() 应用快速函数来检查每一行。例如,如果你的矩阵是 x,

    goodIdx <- apply(x, 1, function(r) !any(is.na(r)))
    newX <- x[goodIdx,]
    

    【讨论】:

      【解决方案2】:

      我认为 na.rm 通常只适用于函数,例如 mean 函数。我会选择 complete.caseshttp://stat.ethz.ch/R-manual/R-patched/library/stats/html/complete.cases.htm

      假设您有以下 3x3 矩阵:

      x <- matrix(c(1:8, NA), 3, 3)
      
      > x
           [,1] [,2] [,3]
      [1,]    1    4    7
      [2,]    2    5    8
      [3,]    3    6   NA
      

      那么你可以得到这个矩阵的完整案例

      y <- x[complete.cases(x),]
      
      > y
           [,1] [,2] [,3]
      [1,]    1    4    7
      [2,]    2    5    8
      

      complete.cases-函数返回一个真值向量,表明一个案例是否完整:

      > complete.cases(x)
      [1]  TRUE  TRUE FALSE
      

      然后你索引矩阵 x 的行并添加“,”表示你想要所有列。

      【讨论】:

        【解决方案3】:

        na.omit() 将采用矩阵(和数据框)并仅返回那些没有任何 NA 值的行 - 它需要 complete.cases() 进一步删除 FALSE 行。

        > x <- data.frame(c(1,2,3), c(4, NA, 6))
        > x
          c.1..2..3. c.4..NA..6.
        1          1           4
        2          2          NA
        3          3           6
        > na.omit(x)
          c.1..2..3. c.4..NA..6.
        1          1           4
        3          3           6
        

        【讨论】:

          猜你喜欢
          • 2019-03-19
          • 2012-03-08
          • 1970-01-01
          • 2011-02-26
          • 2013-08-17
          • 1970-01-01
          • 2018-05-18
          • 2019-05-08
          • 2011-08-26
          相关资源
          最近更新 更多