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