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

R语言如何交换向量中每两个相邻元素的位置(偶数位前移)

R向量相邻奇偶位交换排序实现

现有已知条件

  • 初始向量:
vector_have <- c("A", "B", "C", "A1", "B2", "C3")
# 控制台输出
[1] "A"  "B"  "C"  "A1" "B2" "C3"
  • 目标输出向量:
vector_wanted <- c("A1", "A", "B2", "B", "C3", "C")
# 控制台输出
[1] "A1" "A"  "B2" "B"  "C3" "C" 
  • 已尝试方案的输出:
    直接调用默认排序函数得到的结果不符合需求,输出为:
sort(vector_have)
[1] "A"  "A1" "B"  "B2" "C"  "C3"

核心需求:将排序后向量中每个偶数位置的元素,与其前一位相邻的奇数位置元素交换位置。

可行实现方案

方案1:索引配对重排(写法最简洁)

不需要写循环迭代,直接构造位置索引即可完成交换,完全适配逻辑索引的实现思路:

# 先完成基础排序
v_sorted <- sort(vector_have)
# 生成奇偶位置序列
odd_pos <- seq(1, length(v_sorted), by = 2)
even_pos <- seq(2, length(v_sorted), by = 2)
# 按偶位、奇位的配对顺序拼接索引,取子集得到结果
vector_res <- v_sorted[c(rbind(even_pos, odd_pos))]

运行后验证结果:

vector_res
[1] "A1" "A"  "B2" "B"  "C3" "C"

和目标向量完全一致。

方案2:逻辑向量取子集

用交替TRUE/FALSE的逻辑向量分别筛选奇偶位元素,再按配对顺序重组:

v_sorted <- sort(vector_have)
# 构造长度匹配的逻辑向量:奇数位为FALSE,偶数位为TRUE
is_even_pos <- rep(c(FALSE, TRUE), length.out = length(v_sorted))
# 重组元素
vector_res <- c(rbind(v_sorted[is_even_pos], v_sorted[!is_even_pos]))

输出结果和方案1完全相同。

适配提示:如果实际使用时向量长度为奇数,只需要在结果末尾补上排序后向量的最后一个元素(即未配对的最后一个奇数位元素)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:21:34