首页 > 解决方案 > R:如何过滤列,只要它包含值的组合?

问题描述

我有一个这样的df:

VisitID | Item |
1       | A    |
1       | B    |
1       | C    |
1       | D    |
2       | A    |
2       | D    |
2       | B    |
3       | B    |
3       | C    |
4       | D    |
4       | C    |

在 R 中,只要包含项目 A 和 B,我如何过滤访问 ID?预期结果:

VisitID | Item |
1       | A    |
1       | B    |
1       | C    |
1       | D    |
2       | A    |
2       | D    |
2       | B    |

我试过df %>% group_by(VisitID) %>% filter(any(Item == 'A' & Item == 'B'))但它不起作用..

df <- read_delim("ID | Item 
1  | A    
1  | B    
2  | A    
3  | B    
1  | C    
4  | C    
5  | B    
3  | A    
4  | A    
5  | D", delim = "|", trim_ws = TRUE)

标签: rdplyr

解决方案


既然你想要“A”和“B”,你可以使用all

library(dplyr)
df %>% group_by(VisitID) %>% filter(all(c("A", "B") %in% Item))

#  VisitID Item 
#    <int> <chr>
#1       1 A    
#2       1 B    
#3       1 C    
#4       1 D    
#5       2 A    
#6       2 D    
#7       2 B    

或者,如果您想any单独使用它们。

df %>% group_by(VisitID) %>% filter(any(Item == 'A') && any(Item == 'B'))

推荐阅读