2014-03-28 484 views
0

我試圖將具有兩列的矩陣轉換爲另一種形式的矩陣。將兩者結合起來的就是1:5的編號。有沒有人有一個簡單的方法來做到以下幾點?如何將矩陣轉換爲具有更多列的矩陣

預先感謝 這是我的代碼

data <- matrix(c(rep(1:5,6),101:130),byrow=FALSE,ncol=2) 
    data 
     [,1] [,2] 
[1,] 1 101 
[2,] 2 102 
[3,] 3 103 
[4,] 4 104 
[5,] 5 105 
[6,] 1 106 
[7,] 2 107 
[8,] 3 108 
[9,] 4 109 
[10,] 5 110 
[11,] 1 111 
[12,] 2 112 
[13,] 3 113 
[14,] 4 114 
[15,] 5 115 
[16,] 1 116 
[17,] 2 117 
[18,] 3 118 
[19,] 4 119 
[20,] 5 120 
[21,] 1 121 
[22,] 2 122 
[23,] 3 123 
[24,] 4 124 
[25,] 5 125 
[26,] 1 126 
[27,] 2 127 
[28,] 3 128 
[29,] 4 129 
[30,] 5 130 

data.2 <- matrix(data[,2],ncol=6) 
data.2 
     [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 101 106 111 116 121 126 
[2,] 102 107 112 117 122 127 
[3,] 103 108 113 118 123 128 
[4,] 104 109 114 119 124 129 
[5,] 105 110 115 120 125 130 
rownames(data.2) <- c(1:5) 
data.2 
    [,1] [,2] [,3] [,4] [,5] [,6] 
1 101 106 111 116 121 126 
2 102 107 112 117 122 127 
3 103 108 113 118 123 128 
4 104 109 114 119 124 129 
5 105 110 115 120 125 130 
+2

我不知道你會更容易考慮。也許't(unstack(data.frame(data),X2〜X1))'? – Roland

+0

謝謝羅蘭。那正是我認爲更容易的。如果你碰巧知道我是否也可以在第一行中保留1:5的名字,那太棒了! – user3472591

回答

1
data <- matrix(c(rep(1:5,6),101:130),byrow=FALSE,ncol=2) 

res <- t(unstack(data.frame(data), X2~X1)) 
#clean up rownames: 
rownames(res) <- gsub("X", "", rownames(res)) 

# [,1] [,2] [,3] [,4] [,5] [,6] 
#1 101 106 111 116 121 126 
#2 102 107 112 117 122 127 
#3 103 108 113 118 123 128 
#4 104 109 114 119 124 129 
#5 105 110 115 120 125 130 
0

如果您確信第一列始終爲1:5重複第n次​​,那麼你可以只是簡單的創建一個從第二列矩陣:

matrix(data[,2], nrow=5) 

或者,您可以第一列排序矩陣:

matrix(data[order(data[,1]),2], nrow=5, byrow=TRUE) 

我覺得牛逼帽子@Roland的想法與斯塔克比我的解決方案:)