在多列上过滤基于NA的数据帧

时间:2015-11-04 11:36:28

标签: r dataframe

我有以下数据框,可以调用它df,并带有以下观察结果:

id   type   company
1    NA      NA
2    NA      ADM
3    North   Alex
4    South   NA
NA   North   BDA
6    NA      CA

我想只保留“type”和“company”列中没有NA的记录。

id   type   company
3    North   Alex
NA   North   BDA

我试过了:

 df_non_na <- df[!is.na(df$company) || !is.na(df$type), ]

但是这没用。

提前致谢

5 个答案:

答案 0 :(得分:7)

我们可以获取两列的逻辑索引,使用&并对行进行子集化。

df1[!is.na(df1$type) & !is.na(df1$company),]
# id  type company
#3  3 North    Alex
#5 NA North     BDA

或者在逻辑矩阵(rowSums)上使用is.na(df1[-1])进行子集化。

df1[!rowSums(is.na(df1[-1])),]

答案 1 :(得分:3)

您需要使用 drop_na()

library(dplyr)

new_df <- df %>% drop_na(type, company)

答案 2 :(得分:0)

您需要AND运算符(&),而不是OR(|) 我还强烈建议通过使用dplyr函数filter()和dplyr中的管道运算符%>%来建议使用tidyverse方法:

library(dplyr)
df_not_na <- df %>% filter(!is.na(company) & !is.na(type))

答案 3 :(得分:0)

使用dplyr,您还可以使用filter_at函数

library(dplyr)
df_non_na <- df %>% filter_at(vars(type,company),all_vars(!is.na(.)))

答案 4 :(得分:-2)

你可以使用

na.omit(data_frame_name)