我有以下数据集,其中某些条目(唯一的A)在B中没有数据,而另一些有时在B中。
A B
1 NA
2 NA
3 77
1 NA
2 81
我要删除始终不适用的条目,并保留其余
A B
2 NA
3 77
2 81
答案 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))