如何在r中使用更多列将矩阵转换为矩阵

时间:2014-03-28 12:45:41

标签: r matrix

我正在尝试将具有两列的矩阵转换为另一种形式的矩阵。将两者结合起来的是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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您确定第一列始终是1:5重复第n次​​,那么您只需从第二列创建矩阵:

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

或者您可以按第一列排序矩阵:

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

我认为@Roland在拆散时的想法比我的解决方案更好:)