filtering data frame based on NA on multiple columns
We can get the logical index for both columns, use &
and subset the rows.
df1[!is.na(df1$type) & !is.na(df1$company),]
# id type company
#3 3 North Alex
#5 NA North BDA
Or use rowSums
on the logical matrix (is.na(df1[-1])
) to subset.
df1[!rowSums(is.na(df1[-1])),]
Using dplyr, you can also use the filter_at
function
library(dplyr)
df_non_na <- df %>% filter_at(vars(type,company),all_vars(!is.na(.)))
all_vars(!is.na(.))
means that all the variables listed need to be not NA.
If you want to keep rows that have at least one value, you could do:
df_non_na <- df %>% filter_at(vars(type,company),any_vars(!is.na(.)))