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

R语言如何使用purrr包map函数高效计算分组列子集最小值

R语言分组计算指定子集最小值的简化实现

你不需要创建中间聚合表再做左连接,直接利用dplyr分组后的窗口计算能力,单步就能得到想要的结果,代码更简洁,运行效率也更高。

推荐实现代码

library(dplyr)

# 单步完成计算,无中间表
df_result <- df %>%
  group_by(index) %>%
  mutate(
    # 直接在分组内取符合hour条件的runtime_sec子集计算最小值,自动填充到组内所有行
    min_ref = min(runtime_sec[hour >= 8 & hour < 10])
  ) %>%
  ungroup()

代码说明

  • 按index分组后,mutate()会在每个分组内独立计算,计算结果会自动匹配组内每一行,省去了聚合、连接的冗余步骤
  • 如果你需要匹配你给出的示例中index=2的输出结果(min_ref=100),只需要把hour判断条件调整为hour >=8 & hour <=10即可——你当前写的hour <10会把index=2唯一的hour=10行排除在计算范围外,最终得到NA值,和你的预期输出不符
  • 如果需要用匿名函数实现,也可以写成如下形式,逻辑和上面的写法完全一致:
# 匿名函数版本
df_result <- df %>%
  group_by(index) %>%
  mutate(
    min_ref = (\(x) min(x[hour >= 8 & hour <= 10]))(runtime_sec)
  ) %>%
  ungroup()

关于purrr包map函数的说明

你这个场景属于标准的分组窗口计算,dplyr原生的分组mutate已经是最高效简洁的实现,不需要引入purrr的map系列函数,强行用map反而会增加代码复杂度、降低运行效率。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:09:26