如果两个变量的值为NA,则在R中对数据进行子集以删除行

时间:2017-03-07 22:55:41

标签: r dplyr subset

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

2 个答案:

答案 0 :(得分:2)

你可以这样做

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

答案 1 :(得分:-1)

以下是一些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))