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



你好,编码社区,

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

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

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

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

非常感谢!

测试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_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))

使用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

最新更新