首页 > 解决方案 > 过滤不包含特定条件的变量

问题描述

> DF<-data.frame(id=c(1,1,2,3,3),code=c("A","B","E","NA","A"))
> DF
  id code
1  1    A
2  1    B
3  2    E
4  3   NA
5  3    A

我想删除所有idwhere codeis A。使用下面我得到一个错误的结果。

> DF%>%group_by(id)%>%filter(!(code=="A"))

# A tibble: 3 x 2
# Groups:   id [3]
     id code 
  <dbl> <fct>
1     1 B    
2     2 E    
3     3 NA   

但我想要的输出是:

 id code
1  2    E

有任何想法吗?最佳 H

标签: r

解决方案


您可以使用 :

library(dplyr)
DF %>% group_by(id) %>% filter(!any(code == 'A'))

#    id code 
#  <dbl> <chr>
#1     2 E    

基本 R 中的相同逻辑:

subset(DF, !ave(code == 'A', id, FUN = any))

data.table

library(data.table)
setDT(DF)[, .SD[!any(code == 'A')], id]

推荐阅读