是否有 R 语法来删除列中具有特定多个 NA 的行?

Is there R syntax to delete rows with specific, multiple NAs in columns?

你好编码社区,

如果我的数据框看起来像:

ID     Col1 Col2 Col3 Col4
Per1   1    2    3    4
Per2   2    NA   NA   NA
Per3   NA   NA   5    NA

是否有任何语法可以根据 Col2、Col3 和 Col4 = NA 删除与 ID = Per2 关联的行?我希望代码允许我在三个特定列(Col2、Col3 和 Col4)全部为 NA 的基础上删除一行。此代码不会删除行 ID = Per3,即使有三个 NA。

请注意,我知道如何删除特定行,但我的数据框很大,所以我不想手动排序所有 rows/columns。

非常感谢!

您可以使用if_all

library(dplyr)
filter(df, !if_all(c(Col2, Col3, Col4), ~ is.na(.)))

#     ID Col1 Col2 Col3 Col4
# 1 Per1    1    2    3    4
# 2 Per3   NA   NA    5   NA

数据

df <- structure(list(ID = c("Per1", "Per2", "Per3"), Col1 = c(1L, 2L, 
NA), Col2 = c(2L, NA, NA), Col3 = c(3L, NA, 5L), Col4 = c(4L, 
NA, NA)), class = "data.frame", row.names = c(NA, -3L))

测试 NA 并删除 NA 数等于使用 rowSums 测试的列数的行。

dat[!rowSums(is.na(dat[c('Col2', 'Col3', 'Col4')])) == 3, ]
#     ID Col1 Col2 Col3 Col4
# 1 Per1    1    2    3    4
# 3 Per3   NA   NA    5   NA

使用if_any

library(dplyr)
df %>% 
  filter(if_any(Col2:Col4, complete.cases))
    ID Col1 Col2 Col3 Col4
1 Per1    1    2    3    4
2 Per3   NA   NA    5   NA