2013-08-20 141 views
3

我有以下的矩陣「Z」:通過列名排序矩陣

   0   1   2   3   4   5   8   9   11   12   15   16   17 
[1,] 0.9992149 0.0001345895 4.486317e-05 2.243158e-05 6.729475e-05 8.972633e-05 2.243158e-05 4.486317e-05 4.486317e-05 2.243158e-05 2.243158e-05 6.729475e-05 2.243158e-05 
[2,] 0.7116196 0.1991475998 6.440108e-02 1.475998e-02 3.275011e-03 8.075370e-04 0.000000e+00 7.851054e-04 1.345895e-04 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 
[3,] 0.7473531 0.1313817856 2.954240e-02 1.390758e-02 1.195603e-02 1.518618e-02 2.557201e-03 1.615074e-03 1.166442e-03 4.419022e-03 5.383580e-04 4.486317e-04 4.934948e-04 
[4,] 0.2177434 0.4941677882 1.351503e-01 3.319874e-02 2.438313e-02 4.311350e-02 6.146254e-03 9.376402e-03 5.607896e-04 4.934948e-04 1.121579e-04 2.018843e-04 4.486317e-05 
       18   20   22   24   31   6   10   35   36   37   38   39 
[1,] 2.243158e-05 4.486317e-05 2.243158e-05 6.729475e-05 2.243158e-05 0.000000e+00 0.0000000000 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000000 
[2,] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 6.729475e-05 0.0001794527 0.0001121579 4.486317e-05 6.729475e-05 3.073127e-03 0.001076716 
[3,] 6.505159e-04 2.691790e-04 2.691790e-04 8.972633e-05 0.000000e+00 2.433827e-02 0.0029385375 0.0000000000 2.243158e-05 2.243158e-05 2.243158e-05 0.000000000 
[4,] 4.486317e-05 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.279049e-02 0.0024450426 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000000 
       40   41   42   43   7   13   14   19   21   23   25   26 
[1,] 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000000 0.0000000000 0.0000000000 0.000000e+00 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 
[2,] 0.0003364738 6.729475e-05 2.243158e-05 2.243158e-05 0.000000000 0.0000000000 0.0000000000 0.000000e+00 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 
[3,] 0.0000000000 0.000000e+00 0.000000e+00 2.243158e-05 0.006976223 0.0018842530 0.0006280843 4.037685e-04 0.0001794527 1.794527e-04 2.467474e-04 4.486317e-05 
[4,] 0.0000000000 0.000000e+00 0.000000e+00 0.000000e+00 0.009129655 0.0004486317 0.0003364738 2.243158e-05 0.0000000000 2.243158e-05 4.486317e-05 0.000000e+00 
       27   28   30   32   33   34   54   67   45 
[1,] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 
[2,] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 
[3,] 4.486317e-05 4.486317e-05 2.243158e-05 2.243158e-05 4.486317e-05 2.243158e-05 2.243158e-05 2.243158e-05 0.000000e+00 
[4,] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.243158e-05 

其列名稱其實都是字符,即"0""1"。現在我想列名爲integer。所以,我做的:

colnames(z) <- as.integer(colnames(z) 

不過,我不知道如何通過列名的矩陣排列,從而使基體將從0,1,2,3,4,5,6,7,8去, 9,10 ......

的數據結構如下:

structure(c(0.999214894571557, 0.71161956034096, 0.747353073126963, 
0.217743382682817, 0.000134589502018843, 0.199147599820547, 0.13138178555406, 
0.49416778824585, 4.48631673396142e-05, 0.0644010767160162, 0.0295423956931359, 
0.135150291610588, 2.24315836698071e-05, 0.0147599820547331, 
0.0139075818752804, 0.0331987438313145, 6.72947510094213e-05, 
0.00327501121579183, 0.0119560340960072, 0.0243831314490803, 
8.97263346792284e-05, 0.000807537012113055, 0.0151861821444594, 
0.0431135038133692, 2.24315836698071e-05, 0, 0.00255720053835801, 
0.00614625392552714, 4.48631673396142e-05, 0.000785105428443248, 
0.00161507402422611, 0.00937640197397936, 4.48631673396142e-05, 
0.000134589502018843, 0.00116644235082997, 0.000560789591745177, 
2.24315836698071e-05, 0, 0.004419021982952, 0.000493494840735756, 
2.24315836698071e-05, 0, 0.00053835800807537, 0.000112157918349035, 
6.72947510094213e-05, 0, 0.000448631673396142, 0.000201884253028264, 
2.24315836698071e-05, 0, 0.000493494840735756, 4.48631673396142e-05, 
2.24315836698071e-05, 0, 0.000650515926424406, 4.48631673396142e-05, 
4.48631673396142e-05, 0, 0.000269179004037685, 0, 2.24315836698071e-05, 
0, 0.000269179004037685, 0, 6.72947510094213e-05, 0, 8.97263346792284e-05, 
0, 2.24315836698071e-05, 0, 0, 0, 0, 6.72947510094213e-05, 0.0243382682817407, 
0.022790489008524, 0, 0.000179452669358457, 0.00293853746074473, 
0.00244504262000897, 0, 0.000112157918349035, 0, 0, 0, 4.48631673396142e-05, 
2.24315836698071e-05, 0, 0, 6.72947510094213e-05, 2.24315836698071e-05, 
0, 0, 0.00307312696276357, 2.24315836698071e-05, 0, 0, 0.00107671601615074, 
0, 0, 0, 0.000336473755047106, 0, 0, 0, 6.72947510094213e-05, 
0, 0, 0, 2.24315836698071e-05, 0, 0, 0, 2.24315836698071e-05, 
2.24315836698071e-05, 0, 0, 0, 0.00697622252131, 0.00912965455361149, 
0, 0, 0.0018842530282638, 0.000448631673396142, 0, 0, 0.000628084342754598, 
0.000336473755047106, 0, 0, 0.000403768506056528, 2.24315836698071e-05, 
0, 0, 0.000179452669358457, 0, 0, 0, 0.000179452669358457, 2.24315836698071e-05, 
0, 0, 0.000246747420367878, 4.48631673396142e-05, 0, 0, 4.48631673396142e-05, 
0, 0, 0, 4.48631673396142e-05, 0, 0, 0, 4.48631673396142e-05, 
0, 0, 0, 2.24315836698071e-05, 0, 0, 0, 2.24315836698071e-05, 
0, 0, 0, 4.48631673396142e-05, 0, 0, 0, 2.24315836698071e-05, 
0, 0, 0, 2.24315836698071e-05, 0, 0, 0, 2.24315836698071e-05, 
0, 0, 0, 0, 2.24315836698071e-05), .Dim = c(4L, 46L), .Dimnames = list(
    NULL, c("0", "1", "2", "3", "4", "5", "8", "9", "11", "12", 
    "15", "16", "17", "18", "20", "22", "24", "31", "6", "10", 
    "35", "36", "37", "38", "39", "40", "41", "42", "43", "7", 
    "13", "14", "19", "21", "23", "25", "26", "27", "28", "30", 
    "32", "33", "34", "54", "67", "45"))) 
+2

從'colnames':'對於一個數據幀,對於rownames值應的特徵向量的非複製和非缺少名稱(這是強制執行的),以及爲colnames(最好是)唯一語法有效名稱的字符向量。在這兩種情況下,值都會被as.character強制設置,並且設置colnames會將行名轉換爲字符。「我認爲這很明顯,所以要回答您的問題的另一部分,不能使用列名類「整數」。 – A5C1D2H2I1M1N2O1R2T1

回答

7

求助於你的矩陣列,你可以使用order

# m is your matrix 
m <- m[, order(as.integer(colnames(m)))] 

colnames(m) 
# [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "30" "31" "32" "33" 
# [34] "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "45" "54" "67" 
+0

+1。剛剛發佈了相同的答案。 – A5C1D2H2I1M1N2O1R2T1

4

嘗試從gtoolsmixedsort ...

require(gtools) 
mixedsort(colnames(z)) 
#[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "30" "31" 
#[32] "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "45" "54" "67" 

順便說一句,你不能有整數colnames。它在語法上不合法。從?colnames ...

...爲colnames(最好)唯一語法上有效的名稱的字符向量。在這兩種情況下,值都會被as.character強制設置,並且設置colnames會將行名轉換爲字符。

+0

+1。我最喜歡的功能之一。 – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto我也是! :-) –