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

如何按公共元素合并两个R向量并保留元素顺序?

基于公共元素合并向量(保留原顺序)

你需要的是基于公共元素合并两个向量,同时保留元素在原向量中的顺序,而非默认排序后的结果。以下是具体实现方案:

通用函数实现

这个函数可以处理任意长度、含公共元素的向量,支持两种合并方向:

merge_vecs <- function(vec1, vec2, direction = "left_to_right") {
  # 获取两个向量的公共元素(去重)
  common_elements <- intersect(vec1, vec2)
  # 提取vec1中独有的元素,保留原顺序并去重
  unique_vec1 <- unique(vec1[!vec1 %in% common_elements])
  # 提取vec2中独有的元素,保留原顺序并去重
  unique_vec2 <- unique(vec2[!vec2 %in% common_elements])
  
  if (direction == "left_to_right") {
    # 左向量独有部分 + 公共元素 + 右向量独有部分
    c(unique_vec1, common_elements, unique_vec2)
  } else if (direction == "right_to_left") {
    # 右向量独有部分 + 公共元素 + 左向量独有部分
    c(unique_vec2, common_elements, unique_vec1)
  } else {
    stop("direction参数仅支持'left_to_right'或'right_to_left'")
  }
}

测试示例

示例1

vec1 = c(1,2)
vec2 = c(2,3)

# 输出 1 2 3
merge_vecs(vec1, vec2, "left_to_right")
# 输出结果: [1] 1 2 3

# 输出 3 2 1
merge_vecs(vec1, vec2, "right_to_left")
# 输出结果: [1] 3 2 1

示例2

vec1 = c(3,1)
vec2 = c(3,2)

# 输出 1 3 2
merge_vecs(vec1, vec2, "left_to_right")
# 输出结果: [1] 1 3 2

# 输出 2 3 1
merge_vecs(vec1, vec2, "right_to_left")
# 输出结果: [1] 2 3 1

可选调整

  • 如果需要保留原向量中独有元素的重复项,只需去掉代码中的unique()函数即可。
  • 若两个向量存在多个公共元素,当前函数会保留所有去重后的公共元素;如果需要匹配公共元素的出现位置或次数,可进一步修改逻辑(比如用循环定位公共元素的位置)。

内容的提问来源于stack exchange,提问作者B. Jenkins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:10