首页 > 解决方案 > 基于某些字符串的排序列

问题描述

我在列中有数据,其中的字符是TRG1TRG2、和TRG3TRG4TRG5

我如何才能根据这个数据框排序,TRG以便第一个TRG1....finallyTRG5放在列中?

我的数据是

> dput(head(result))
structure(list(`Sample Name` = c("ACTB", "ATP5F1", "DDX5", "EEF1G", 
"GAPDH", "NCL"), `31-10TRG3R` = c(15723, 1682, 16598, 17240, 
38686, 10670), `31-11TRG4R` = c(24846, 3294, 25522, 38914, 73022, 
14628), `31-12TRG4R` = c(7812, 1326, 5750, 9204, 12352, 5489), 
    `31-13TRG1R` = c(15332, 1162, 18268, 20875, 62257, 10614), 
    `31-14TRG4R` = c(7644, 1435, 16822, 13731, 26244, 10548), 
    `31-15TRG4R` = c(6501, 947, 10320, 7285, 10538, 4638), `31-16TRG4R` = c(5428, 
    825, 11789, 12018, 6812, 5954), `31-17TRG3R` = c(10074, 1056, 
    7966, 12489, 26819, 6404), `31-18TRG1R` = c(12487, 567, 13945, 
    16474, 43309, 11831), `31-19TRG4R` = c(5211, 917, 9144, 8024, 
    8200, 3935), `31-1TRG3R` = c(9928, 1112, 5726, 6227, 12942, 
    3644), `31-21TRG3R` = c(6806, 1460, 7472, 12420, 46378, 5871
    ), `31-22TRG3R` = c(4834, 640, 9807, 7082, 14823, 4594), 
    `31-23TRG1R` = c(3156, 765, 18034, 18982, 17237, 18880), 
    `31-24TRG4R` = c(6990, 761, 4440, 2833, 8150, 1340), `31-25TRG2R` = c(60621, 
    6290, 47502, 135948, 233717, 37583), `31-26TRG3R` = c(4198, 
    718, 2564, 3830, 5790, 1258), `31-27TRG2R` = c(10815, 1010, 
    8694, 11868, 18684, 5706), `31-28TRG4R` = c(7980, 1343, 7342, 
    9874, 14286, 4255), `31-29TRG1R` = c(3854, 748, 9314, 9132, 
    25546, 7852), `31-2TRG1R` = c(7653, 1495, 12238, 12568, 11296, 
    11256), `31-30TRG5R` = c(24358, 2091, 15594, 26998, 91442, 
    20914), `31-31TRG4R` = c(6796, 940, 12752, 11642, 41967, 
    12922), `31-32TRG2R` = c(127379, 11541, 90020, 74881, 234454, 
    51464), `31-33TRG1R` = c(4139, 338, 8260, 8650, 13916, 8000
    ), `31-34TRG3R` = c(37303, 2998, 22122, 30431, 51981, 11737
    ), `31-35TRG4R` = c(32279, 2718, 42178, 36956, 115962, 21194
    ), `31-36TRG3R` = c(12424, 1134, 8177, 14462, 20147, 6648
    ), `31-37TRG2R` = c(7031, 690, 8208, 17495, 28514, 7058), 
    `31-38TRG3R` = c(3645, 698, 16117, 11122, 25739, 7031), `31-39TRG3R` = c(28273, 
    2169, 14697, 20890, 68353, 25293), `31-3TRG4R` = c(9250, 
    1335, 24776, 14674, 31266, 8732), `31-40TRG1R` = c(28858, 
    2100, 26910, 43331, 104235, 19544), `31-41TRG1R` = c(13980, 
    1184, 13204, 13624, 47414, 11870), `31-42TRG2R` = c(22697, 
    2401, 16326, 22962, 40136, 11796), `31-43TRG3R` = c(13820, 
    797, 16245, 7827, 38292, 6206), `31-44TRG2R` = c(9477, 1244, 
    7140, 6580, 12457, 5176), `31-45TRG3R` = c(12182, 573, 2818, 
    3699, 4365, 1639), `31-46TRG1R` = c(5438, 997, 9226, 26045, 
    17740, 8628), `31-47TRG3R` = c(14419, 1927, 7350, 10375, 
    15736, 3415), `31-48TRG2R` = c(8758, 1002, 8044, 6677, 17354, 
    7355), `31-49TRG4R` = c(7738, 792, 13920, 15589, 42536, 14056
    ), `31-4TRG3R` = c(9947, 1115, 7267, 5957, 13831, 2793), 
    `31-50TRG4R` = c(6660, 701, 4092, 16796, 7958, 2408), `31-51TRG2R` = c(151880, 
    16572, 93610, 110556, 303604, 57029), `31-52TRG2R` = c(7184, 
    1396, 12785, 11124, 13050, 8934), `31-53TRG2R` = c(9012, 
    1118, 7786, 11482, 19512, 9143), `31-5TRG2R` = c(5479, 440, 
    8913, 7103, 15886, 5801), `31-6TRG4R` = c(6716, 677, 8812, 
    12184, 14380, 7684), `31-7TRG3R` = c(16192, 1155, 9405, 11930, 
    30034, 7726), `31-8TRG1R` = c(11408, 1007, 11396, 20424, 
    38188, 9570), `31-9TRG1R` = c(9468, 812, 10774, 8504, 15464, 
    4606)), row.names = c(NA, 6L), class = "data.frame")
>

标签: r

解决方案


可能是,我们提取“TRG”之后的数字并将其用于order

result2 <- result[c(1, order(as.numeric(sub(".*TRG(\\d+)\\D+", "\\1", 
          names(result)[-1])))+1)]

推荐阅读