data123456789
data123456789

Reputation: 31

Subsetting data in R to remove rows if values for two variables are NA

I want to remove all rows from my dataset that are NA in two columns. If a row has a non-NA value in either column, I want to keep it. How do I do this?

Upvotes: 1

Views: 1136

Answers (2)

akrun
akrun

Reputation: 887088

Here are a couple of base R suggestions. Loop through the columns of datasets, convert it to a logical vector, and collapse the logical vectors by comparing each corresponding element with Reduce, negate the output and subset the dataset

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

Or converting the logical matrix (!is.na(df)) to a logical vector to subset the dataset

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

data

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

Upvotes: -1

tbradley
tbradley

Reputation: 2280

you can do this

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)

and you get:

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

Upvotes: 2

Related Questions