R使用dplyr按单列分组取组内最低价格对应完整行如何实现?
问题原因
你原代码的错误在于将qty、brand字段也加入了group_by的分组维度,导致分组粒度过细,无法按fruit维度取每组最低价对应的完整行。
正确实现方法
方法1:使用slice_min(dplyr 1.0.0及以上版本推荐)
直接对fruit分组后,取每组price最小的行即可:
library(dplyr) data %>% group_by(fruit) %>% slice_min(order_by = price, n = 1) %>% ungroup() # 不需要后续分组操作时可解除分组
如果同组存在多个价格相同的最低行,默认会全部返回,只需返回第一条时可添加参数with_ties = FALSE。
方法2:使用filter匹配最小值
兼容旧版本dplyr的写法:
library(dplyr) data %>% group_by(fruit) %>% filter(price == min(price)) %>% ungroup()
方法3:排序后取首行
先按水果和价格升序排序,分组后取每组第一条记录:
library(dplyr) data %>% arrange(fruit, price) %>% group_by(fruit) %>% slice(1) %>% ungroup()
以上三种方法均可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者horse
相关产品推荐
相关产品推荐

