R:如何用一个栏的两个条件过滤?

时间:2018-10-27 00:31:13

标签: r filter conditional subset

例如,我有三列-ID列,Visit列,Drug列。 “药物”列的字符值为A,B,C和D。问题是每个ID都只有A或B或C或D或A和B的组合。

ID  Visit Drug 
1   1       A
1   2       B
1   3       A
2   1       B
2   2       B
3   1       C
3   2       C

因此,如果我要过滤仅包含药物B的ID(不能同时包含A和B),该如何过滤呢?从上面开始,我只想要ID 2,而不想要ID 1,因为ID 1同时具有A和B。

我尝试了这段代码,但结果却给我错误

df %>% 
group_by(id) %>% 
filter(drug == "B" | drug != "A" & drug != "B" )

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

在这种情况下,您应该为整个Drug向量指定条件,就像下面的all一样:

df %>% group_by(ID) %>% filter(all(Drug == "B"))
# A tibble: 2 x 3
# Groups:   ID [1]
#      ID Visit Drug 
#   <int> <int> <fct>
# 1     2     1 B    
# 2     2     2 B