You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dplyr按组选择符合不同条件的首行?

更简洁的实现方法

可以利用dplyr的内置函数,通过一次分组操作完成需求,无需拆分数据框再合并,以下是两种简洁方案:

方案一:基于优先级排序的切片

set.seed(42)
a <- rep(1:3, each = 3)
b <- sample(c(0,1), size = 9, replace = T) 
c <- sample(1:9, size = 9, replace = F)

df <- data.frame(a = a, 
                 b = b,
                 c = c)

df %>%
  group_by(a) %>%
  arrange(desc(b), desc(c), .by_group = TRUE) %>%
  slice(1) %>%
  ungroup()

逻辑说明

  • 先按b降序排序:让b=1的行优先排在组内最前面,确保有符合条件的行时优先选中这类数据
  • 再按c降序排序:在b=1的行里选c最大的,没有b=1的组则直接选组内c最大的
  • 用slice(1)直接取出每组排序后的第一行,完成筛选

方案二:利用权重值的slice_max

df %>%
  group_by(a) %>%
  slice_max(order_by = ifelse(b == 1, c + 1000, c), n = 1) %>%
  ungroup()

逻辑说明

  • 给b=1的行的c值加上一个足够大的固定值(比如1000,只要大于c的最大可能取值即可),人为拉高这类行的排序优先级
  • 用slice_max直接选出每组权重值最大的行,一次性满足需求

这两种方法都比原代码更简洁,且逻辑清晰易维护。

内容的提问来源于stack exchange,提问作者pvidal00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:45:46