R:如何选择具有两个条件的行(购买两个产品)

lll*_*lll 1 r data-manipulation

我有一个类似于以下的数据集:

 ID = c(1,2,3,4,1,2,3) 
 Product = c("a", "b", "c", "a","b","a","a") 
 Quantity = c(1,1,1,1,1,1,1) 
 df = data.frame(ID, Product, Quantity)

#  ID Product Quantity
#1  1       a        1
#2  2       b        1
#3  3       c        1
#4  4       a        1
#5  1       b        1
#6  2       a        1
#7  3       a        1
Run Code Online (Sandbox Code Playgroud)

我想选择同时购买产品a和产品b的人.在上面的例子中,我想要的结果是:

ID Product Quantity
1  a       1
2  b       1
1  b       1
2  a       1
Run Code Online (Sandbox Code Playgroud)

我不记得一个为我这样做的功能.我能想到的是循环,但我希望找到一个更简洁的解决方案.

the*_*ail 6

ave:

df[
 with(df, ave(as.character(Product), ID, FUN=function(x) all(c("a","b") %in% x) ))=="TRUE",
]
#  ID Product Quantity
#1  1       a        1
#2  2       b        1
#5  1       b        1
#6  2       a        1
Run Code Online (Sandbox Code Playgroud)