你好,编码社区,
如果我的数据帧看起来像:
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