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

是否删除一个特定列缺少的值?[副本]

r
  •  0
  • rmahesh  · 技术社区  · 6 年前

    我想删除此数据框中的以下行:

    (a) 包含 NA 跨所有列。 下面是我的示例数据框。

                 gene hsap mmul mmus rnor cfam
    1 ENSG00000208234    0   NA   NA   NA   NA
    2 ENSG00000199674    0   2    2    2    2
    3 ENSG00000221622    0   NA   NA   NA   NA
    4 ENSG00000207604    0   NA   NA   1    2
    5 ENSG00000207431    0   NA   NA   NA   NA
    6 ENSG00000221312    0   1    2    3    2
    

    基本上,我希望得到如下所示的数据帧。

                 gene hsap mmul mmus rnor cfam
    2 ENSG00000199674    0   2    2    2    2
    6 ENSG00000221312    0   1    2    3    2
    

    (b) 包含 不适用 s仅在某些列中 ,所以我也可以得到这个结果:

                 gene hsap mmul mmus rnor cfam
    2 ENSG00000199674    0   2    2    2    2
    4 ENSG00000207604    0   NA   NA   1    2
    6 ENSG00000221312    0   1    2    3    2
    
    0 回复  |  直到 6 年前
        1
  •  6
  •   kasia_b    3 年前

    同时检查 complete.cases :

    > final[complete.cases(final), ]
                 gene hsap mmul mmus rnor cfam
    2 ENSG00000199674    0    2    2    2    2
    6 ENSG00000221312    0    1    2    3    2
    

    na.omit 只需删除所有 NA 's。 完成案例 允许通过仅包括数据帧的某些列进行部分选择:

    > final[complete.cases(final[ , 5:6]),]
                 gene hsap mmul mmus rnor cfam
    2 ENSG00000199674    0    2    2    2    2
    4 ENSG00000207604    0   NA   NA    1    2
    6 ENSG00000221312    0    1    2    3    2
    

    您的解决方案无法运行。如果你坚持使用 is.na ,则必须执行以下操作:

    > final[rowSums(is.na(final[ , 5:6])) == 0, ]
                 gene hsap mmul mmus rnor cfam
    2 ENSG00000199674    0    2    2    2    2
    4 ENSG00000207604    0   NA   NA    1    2
    6 ENSG00000221312    0    1    2    3    2
    

    但使用 完成案例 更清晰、更快。