base-R环境下对数千行列DataFrame按列名数值顺序重排列的方法求助
实现方案
你可以通过正则提取列名后缀的数值再排序的方式实现,全程只用base R内置函数,无需引入第三方包:
步骤1:构造示例数据(你已有数据可跳过这步)
df <- data.frame(P1 = 1:10, P5 = 11:20, P3 = 6:15, P2 = 21:30, P15 = 35:26)
步骤2:核心排序代码
# 提取列名中的数字后缀并转为数值,按数值排序后重排data.frame列 col_suffix_num <- as.numeric(gsub("[^0-9]", "", colnames(df))) df_sorted <- df[, order(col_suffix_num)]
代码说明
gsub("[^0-9]", "", colnames(df)):匹配列名中所有非数字字符并替换为空,仅保留后缀数字字符串as.numeric():将数字字符串转为数值类型,避免字符串排序出现P15排在P2前的问题order(col_suffix_num):得到后缀数值从小到大排序的索引,用该索引选取data.frame的列即可得到预期排序结果
验证输出
执行print(df_sorted)即可得到你需要的排序结果:
P1 P2 P3 P5 P15 1 1 21 6 11 35 2 2 22 7 12 34 3 3 23 8 13 33 4 4 24 9 14 32 5 5 25 10 15 31 6 6 26 11 16 30 7 7 27 12 17 29 8 8 28 13 18 28 9 9 29 14 19 27 10 10 30 15 20 26
内容的提问来源于stack exchange,提问作者Calvin Chow
相关产品推荐
相关产品推荐

