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)
我不记得一个为我这样做的功能.我能想到的是循环,但我希望找到一个更简洁的解决方案.
用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)