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

基于有序索引使用dplyr查找向量的首个最小值及该最小值索引后的首个最大值

用dplyr实现:找到首个最小值及该索引后的首个最大值

嘿,我来帮你搞定这个需求!先从你的初始数据准备开始,我们把代码整理得更贴合tidyverse风格一点:

library(tidyverse)

# 创建向量并转为带索引的数据框
vector_ex <- c(44, 30, 24, 32, 35)
df <- tibble(
  Index = seq_along(vector_ex),
  Value = vector_ex
)

接下来用dplyr的链式操作就能一步实现你的需求,逻辑清晰还易读:

# 计算目标结果
target_result <- df %>%
  # 先定位首个最小值的索引和对应值
  mutate(
    first_min_index = first(Index[Value == min(Value)]),
    first_min_value = min(Value)
  ) %>%
  # 筛选最小值索引之后的行,找到其中的首个最大值
  mutate(
    # 先拿到最小值之后的所有值的最大值
    max_after_min_val = max(Value[Index > first_min_index]),
    # 找到这个最大值对应的首个索引
    first_max_after_min_index = first(Index[Index > first_min_index & Value == max_after_min_val])
  ) %>%
  # 只保留第一行的全局结果
  slice(1) %>%
  # 提取我们需要的核心字段
  select(first_min_index, first_min_value, first_max_after_min_index, max_after_min_val)

# 查看结果
print(target_result)

运行这段代码后,你会得到清晰的结构化结果:

# A tibble: 1 × 4
  first_min_index first_min_value first_max_after_min_index max_after_min_val
            <int>           <dbl>                     <int>             <dbl>
1               3              24                         5                35

逻辑拆解:

  • 找首个最小值:用min(Value)拿到全局最小值,再用first(Index[Value == min(Value)])确保取到的是第一个出现该最小值的索引(避免有多个相同最小值时取到后面的)。
  • 找最小值后的首个最大值:先通过Value[Index > first_min_index]筛选出最小值索引之后的所有数值,找到其中的最大值,再用first()定位到这个最大值首次出现的索引。

如果你想要直接得到题目里的键值对字符串格式,也可以调整最后一步的输出:

result_as_strings <- target_result %>%
  mutate(
    min_pair = str_glue("Index={first_min_index}, vector_ex={first_min_value}"),
    max_pair = str_glue("Index={first_max_after_min_index}, vector_ex={max_after_min_val}")
  ) %>%
  select(min_pair, max_pair)

print(result_as_strings)

输出就是完全符合你预期的格式:

# A tibble: 1 × 2
  min_pair               max_pair              
  <glue>                 <glue>                
1 Index=3, vector_ex=24 Index=5, vector_ex=35

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:55:08