> 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
我要删除所有id
为code
的{{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
答案 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