R 删除非NAs级别不完整的行

R 删除非NAs级别不完整的行,r,dataframe,filter,R,Dataframe,Filter,我已经在StackOverflow中回顾了一段时间可能的解决方案,但我必须在这方面寻求帮助 我有一个具有以下结构的数据帧: df <- data.frame(A = c("A", "A", "A", "A", "B", "B", "C", "C", "C", "C", "D"), B = c("F1", "F2", "F3", "F4", "F2", "F3", "F1", "F2", "F3", "F4", "F4")) 我希望对其

我已经在StackOverflow中回顾了一段时间可能的解决方案,但我必须在这方面寻求帮助

我有一个具有以下结构的数据帧:

df <- data.frame(A = c("A", "A", "A", "A", "B", "B", "C", "C", "C", "C", "D"),
             B = c("F1", "F2", "F3", "F4", "F2", "F3", "F1", "F2", "F3", "F4", 
             "F4"))
我希望对其进行过滤,以仅保留具有完整级别的行,如下所示:

df_new <- data.frame(A = c("A", "A", "A", "A", "C", "C", "C", "C"),
                 B = c("F1", "F2", "F3", "F4", "F1", "F2", "F3", "F4"))

请注意,Col1的过滤条件是Col2必须具有所有级别的lvls以下哪一项如何:

library(tidyverse)

df %>% group_by(A) %>% 
  filter(length(unique(B)) == length(levels(B)))

df %>% group_by(A) %>% 
  filter(n_distinct(B) == length(levels(B)))

以下哪一项如何:

library(tidyverse)

df %>% group_by(A) %>% 
  filter(length(unique(B)) == length(levels(B)))

df %>% group_by(A) %>% 
  filter(n_distinct(B) == length(levels(B)))
这是一个带有data.table的选项

这是一个带有data.table的选项


对不起,在我的问题中,我的意思是删除非NAs级别不完整的行。对不起,在我的问题中,我的意思是删除非NAs级别不完整的行。
df %>% group_by(A) %>% 
  filter(length(unique(B[!is.na(B)])) == length(levels(B)))

df %>% group_by(A) %>% 
  filter(n_distinct(B, na.rm=TRUE) == length(levels(B)))
library(data.table)
setDT(df)[, .SD[nlevels(droplevels(B))==max(nlevels(B))], A]
#   A  B
#1: A F1
#2: A F2
#3: A F3
#4: A F4
#5: C F1
#6: C F2
#7: C F3
#8: C F4