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
相关产品推荐
相关产品推荐

