如何使用dplyr单步提取仅买入从未卖出的商品?
单步实现方案
可以通过分组筛选逻辑一步完成需求,不需要拆分出两个中间表再执行关联操作,实现代码如下:
library(dplyr) df <- data.frame("Date" = paste0("Date", 1:5), "Product" = c("A","B","B","C","D"), "Action" = c("b", "b", "s", "b", "b")) # 保留所有符合条件的完整交易记录 df %>% group_by(Product) %>% filter(!any(Action == "s")) %>% ungroup() # 若仅需要输出去重的商品名(和你原有分步实现的输出结果完全一致) df %>% group_by(Product) %>% filter(!any(Action == "s")) %>% ungroup() %>% distinct(Product)
逻辑说明
- 按照
Product字段分组,每一组对应同一个商品的所有买卖记录 - 分组内用
any(Action == "s")判断该商品是否存在卖出记录,加!取反后仅保留从未有卖出记录的商品 - 两种实现的结果完全匹配你原有分步anti_join的输出效果
内容的提问来源于stack exchange,提问作者problème0123
相关产品推荐
相关产品推荐

