删除具有特定 NA 列的行

Remove rows with specific NA column

我有以下数据集,其中一些条目(唯一的 A)在 B 中没有数据,而其他条目有时有。

A B
1 NA
2 NA
3 77
1 NA
2 81

我想删除总是有 NA 的条目并保留其余

A B
2 NA
3 77
2 81

假设最后的注释中显示的输入可重复显示,对于由 A 定义的每个组,如果 B 中的任何元素不是 [=14],我们 return TRUE =].

subset(DF, ave(!is.na(B), A, FUN = any))

备注

Lines <- "
A B
1 NA
2 NA
3 77
1 NA
2 81"
DF <- read.table(text = Lines, header = TRUE)

我们可以使用 aveA 分组并删除具有 all NAs

的组
df[!with(df, ave(is.na(B), A, FUN = all)), ]

#  A  B
#2 2 NA
#3 3 77
#5 2 81

使用与 dplyr

相同的逻辑
library(dplyr)
df %>%
   group_by(A) %>%
   filter(!all(is.na(B)))

我们可以使用data.table

library(data.table)
setDT(df1)[, .SD[any(!is.na(B))], A]
#    A  B
#1: 2 NA
#2: 2 81
#3: 3 77

数据

df1 <- structure(list(A = c(1L, 2L, 3L, 1L, 2L), B = c(NA, NA, 77L, 
  NA, 81L)), class = "data.frame", row.names = c(NA, -5L))