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

基于列名后缀与字符向量顺序重排R语言矩阵列

重排矩阵列,按指定后缀顺序排序

先看原始代码和生成的矩阵:

cols <- c("foo_AFG", "baz_SYR", "baz_TUR", "foo_SYR", "foo_TUR", "baz_AFG")
foo <- matrix(ncol = length(cols))
colnames(foo) <- cols
w <- c("SYR", "AFG", "TUR")

生成的foo矩阵:

foo_AFG baz_SYR baz_TUR foo_SYR foo_TUR baz_AFG
[1,]      NA      NA      NA      NA      NA      NA

需求

要重排foo的列,让列名中下划线_后的后缀部分,严格遵循向量w的顺序(SYR→AFG→TUR),同一后缀的列可以任意排序。

示例参考

  • 符合要求的结果(后缀顺序正确即可,同后缀列顺序不限):
foo_SYR baz_SYR baz_AFG foo_AFG foo_TUR baz_TUR
[1,]      NA      NA      NA      NA      NA      NA
baz_SYR foo_SYR baz_AFG foo_AFG baz_TUR foo_TUR
[1,]      NA      NA      NA      NA      NA      NA
  • 不符合要求的结果(后缀顺序未遵循w的规则):
foo_SYR foo_AFG foo_TUR baz_SYR baz_AFG baz_TUR
[1,]      NA      NA      NA      NA      NA      NA

解决方案

通过提取后缀、转换为指定层级的因子,再排序列即可实现:

# 提取列名的后缀部分
suffixes <- sub(".*_", "", colnames(foo))
# 将后缀转为因子,指定levels为w的顺序,确保排序优先级
suffix_factor <- factor(suffixes, levels = w)
# 按因子排序列名,重新排列矩阵
foo_reordered <- foo[, order(suffix_factor)]

# 查看重排后的矩阵
foo_reordered

运行后,矩阵列会按照SYR、AFG、TUR的后缀顺序排列;如果需要调整同一后缀内的列顺序,可以在order中加入前缀的排序条件(比如order(suffix_factor, sub("_.*", "", colnames(foo))))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:25:19