删除具有特定NA列的行

时间:2018-12-12 12:44:54

标签: r na

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

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

我要删除始终不适用的条目,并保留其余

A B
2 NA
3 77
2 81

3 个答案:

答案 0 :(得分:4)

我们可以使用ave分组的A并删除具有all NA s的组

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)))

答案 1 :(得分:1)

假设输入在末尾的注释中可重复显示,则对于A定义的每个组,如果B中的任何元素不是NA,则返回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)

答案 2 :(得分:0)

我们可以使用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))