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

R语言中如何参照另一向量的排列规则重排目标向量

向量重排解决方案

你当前用outer生成y时,因为R默认按列拼接矩阵转向量,且后缀顺序设置为lower在前,最终得到的y是所有带.lower后缀的元素在前、所有带.upper后缀的元素在后,和预期顺序不符,用以下两种方法都可以得到目标结果:

方法1:直接生成符合顺序的向量

调整后缀向量的顺序,对outer生成的矩阵做转置后再转为向量即可,不需要后续重排:

nhs_regions <- c("England","East of England","London","Midlands","North East and Yorkshire","North West","South East","South West")
# 把upper放在前面,匹配预期的后缀优先级
x <- c("upper", "lower")
y <- as.vector(t(outer(nhs_regions, x, paste, sep=".")))

运行后y的前4个元素正好是*"England.upper", "England.lower", "East of England.upper", "East of England.lower"*,后续元素也完全遵循nhs_regions的原始顺序,每个原元素对应先.upper后缀、再.lower后缀排列。

方法2:对已生成的原始y做重排

如果你已经生成了原始版本的y,不需要重新生成,直接按索引交错提取即可得到正确顺序:

# 原始y的生成逻辑(你已有的代码)
nhs_regions <- c("England","East of England","London","Midlands","North East and Yorkshire","North West","South East","South West")
x <- c("lower", "upper")
y <- as.vector(outer(nhs_regions, x, paste, sep="."))

# 重排逻辑
n <- length(nhs_regions)
y_correct <- c(rbind(y[(n+1):(2*n)], y[1:n]))

原理是原始y前半段是按nhs_regions顺序排列的所有.lower后缀元素,后半段是同顺序的所有.upper后缀元素,按行拼接两部分后拉平,就能得到每个原元素先upper、后lower的目标顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:30:54