不包含某些条件的过滤器变量

时间:2020-08-09 07:12:21

标签: r

> 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

我要删除所有idcode的{​​{1}}。使用以下内容,我得到一个错误的结果。

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   

有什么想法吗? 最好的H

3 个答案:

答案 0 :(得分:1)

您可以使用:

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]

答案 1 :(得分:1)

使用%in%!的另一个版本

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

答案 2 :(得分:1)

我们也可以使用data.table

library(data.table)
setDT(DF)[DF[, .I[!'A' %chin% code], id]$V1]
#    id code
#1:  2    E