我有以下数据框,可以调用它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), ]
但是这没用。
提前致谢
答案 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)