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

R语言从向量中按条件选取配对元素求最大值的高效实现方法

长向量分段按位置配对取最大值实现方案

需求说明

将输入向量按每6个元素为1个分段拆分,每个分段内前3个元素与后3个元素按位置一一对应,逐对取最大值,最终返回所有最大值组成的结果向量。

可复现示例

set.seed(1)
A <- round(runif(12, min = 1, max = 5))

> A
 [1] 1 2 2 4 3 4 3 4 5 3 4 5

expectedResult <- c(max(A[1], A[4]), max(A[2], A[5]), max(A[3], A[6]), max(A[7], A[10]), max(A[8], A[11]), max(A[9], A[12]))

> expectedResult
[1] 4 3 4 3 4 5

高效解决方案

方案1:纯向量化矩阵运算(推荐,性能最优)

该方案无显式循环,完全依托R底层向量化运算逻辑,处理百万级以上长度的向量性能远优于循环类实现:

n <- length(A)
# 转换为6行矩阵,每列对应一个长度为6的分段
mat <- matrix(A, nrow = 6, byrow = FALSE)
# 前3行与后3行对应位置取最大值,展平为向量
result <- as.vector(pmax(mat[1:3, ], mat[4:6, ]))

# 验证结果与预期一致
identical(result, expectedResult)
# 输出:[1] TRUE

方案2:tidyverse风格实现(可读性优先)

如果更看重代码可读性,可使用该方案,性能略低于矩阵方案,但适配自定义规则调整的场景更灵活:

library(dplyr)

result <- tibble(x = A) %>%
  # 生成分段编号、分段内位置
  mutate(seg_id = (row_number() - 1) %/% 6,
         pos_in_seg = (row_number() - 1) %% 6 + 1) %>%
  # 拆分前3、后3子分组,生成配对位置
  mutate(sub_seg = ifelse(pos_in_seg <= 3, 1, 2),
         pair_pos = ifelse(pos_in_seg <=3, pos_in_seg, pos_in_seg - 3)) %>%
  # 按分段和配对位置分组取最大值
  group_by(seg_id, pair_pos) %>%
  summarise(max_val = max(x), .groups = "drop") %>%
  pull(max_val)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:21:02