【问题标题】:Subsetting data in R to remove rows if values for two variables are NA如果两个变量的值为 NA,则对 R 中的数据进行子集化以删除行
【发布时间】:2017-03-07 22:55:41
【问题描述】:

我想从我的数据集中删除所有在两列中为 NA 的行。如果一行在任一列中都有非 NA 值,我想保留它。我该怎么做?

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    你可以这样做

    library(tidyverse)
    df <- data.frame(a = c(2, 4, 6, NA, 3, NA),
                 b = c(5, 4, 8, NA, 6, 7))
    
    df1 <- df %>%
      filter(is.na(a) == FALSE | is.na(b) == FALSE)
    

    你会得到:

    > df1
       a b
    1  2 5
    2  4 4
    3  6 8
    4  3 6
    5 NA 7
    

    【讨论】:

    • 我建议只使用library(dplyr),除非你真的需要整个tidyverse
    【解决方案2】:

    这里有几个base R 建议。遍历数据集的列,将其转换为逻辑向量,并通过将每个对应元素与Reduce 进行比较来折叠逻辑向量,否定输出并将数据集子集

    df[!Reduce(`&`, lapply(df, is.na)),]
    

    或将逻辑矩阵 (!is.na(df)) 转换为逻辑 vector 以对数据集进行子集化

    df[rowSums(!is.na(df))>0,]
    

    数据

    df <- data.frame(a = c(2, 4, 6, NA, 3, NA),
             b = c(5, 4, 8, NA, 6, 7))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2019-06-12
      • 1970-01-01
      相关资源
      最近更新 更多