【问题标题】:How to remove row if it has a NA value in one certain column [duplicate]如果某列中有NA值,如何删除行[重复]
【发布时间】:2018-02-07 08:12:27
【问题描述】:

我的数据名为“dat”:

A   B   C
NA  2   NA
1   2   3
1   NA  3
1   2   3

如果 B 列中有 NA,我想删除所有行:

A   B   C
NA  2   NA
1   2   3
1   2   3

na.omit(dat) 删除所有带有NA 的行,而不仅仅是 NA 在 B 列中的行。

我也想知道如何在两列中获取 NA 值。

感谢所有建议!

【问题讨论】:

  • 试试is.na,即dat[!is.na(dat$B),]subset(dat, !is.na(B))library(dplyr);dat %>% filter(!is.na(B))data.tablesetDT(dat)[!is.na(B)]

标签: r na


【解决方案1】:

最简单的解决方案是使用is.na()

df[!is.na(df$B), ]

给你:

   A B  C
1 NA 2 NA
2  1 2  3
4  1 2  3

【讨论】:

  • 为什么在“(df$B)”之后需要逗号“,”?
  • 当您使用方括号对 data.frame 进行子集化时,逗号之前的元素适用于行,逗号之后的元素适用于列。如果您不使用逗号,R 将假定您正在选择列。
【解决方案2】:

如果您使用tidyverse,有一个优雅的解决方案!

它包含库tidyr,它提供了方法drop_na,阅读起来非常直观。

所以你就这样做:

library(tidyverse)

dat %>% drop_na("B")

dat %>% drop_na(B)

如果 B 是列名

【讨论】:

    【解决方案3】:

    试试这个:

    df<-data.frame(A=c(NA,1,1,1),B=c(2,2,NA,2),C=c(NA,3,3,3))
    df<-df[-which(is.na(df$B)),]
    df
       A B  C
    1 NA 2 NA
    2  1 2  3
    4  1 2  3
    

    【讨论】:

      【解决方案4】:

      这应该可行

      dat <- dat[dat['B'].notnull()]  
      

      【讨论】:

        猜你喜欢
        • 2018-10-21
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 2011-09-02
        • 2014-11-13
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        相关资源
        最近更新 更多