You need to enable JavaScript to run this app. R语言如何查找向量内所有异号数值对并剔除重复配对
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何查找向量内所有异号数值对并剔除重复配对

R 实现向量符号不同的无重复配对

给定测试向量:

v <- c(-1, 3, 4, -5, 6, -8, 9, -10, -11, -12, 14, -15, -16, -17)

方法1:直接生成无重复组合筛选(小数据量首选)

用R内置的combn函数直接生成所有索引递增的无序两两组合,再筛选符号不同的配对即可,天然不会出现顺序相反的重复项:

# 生成所有两两无序组合,筛选符号不同的配对
pair_mat <- combn(v, 2, function(x) if (prod(x) < 0) x, simplify = TRUE)
# 去除符号相同的配对对应的空值
result <- t(pair_mat[, complete.cases(t(pair_mat))])

输出的result每一行就是一个符合要求的配对,前一个元素在原向量中的位置永远早于后一个元素,不会出现反向重复,输出示例:

[,1] [,2]
[1,]   -1    3
[2,]   -1    4
[3,]   -1    6
[4,]   -1    9
[5,]   -1   14
[6,]    3   -5

方法2:正负索引拆分配对(大数据量高效方案)

如果向量元素很多,先生成所有组合会浪费计算资源,可以先拆分正负元素的索引,再配对筛选:

# 分别提取正数、负数的索引
pos_idx <- which(v > 0)
neg_idx <- which(v < 0)
# 生成所有正负索引的交叉配对
idx_pair <- expand.grid(pos_idx, neg_idx)
# 对每个配对的索引按从小到大排序,保证顺序一致
idx_pair <- t(apply(idx_pair, 1, sort))
# 去重后提取对应值
idx_pair <- unique(idx_pair)
result <- cbind(v[idx_pair[,1]], v[idx_pair[,2]])

两种方法得到的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 05:21:03