繁体   English   中英

如何将矩阵转换为R中具有更多列的矩阵

[英]How to transform matrix into matrix with more columns in r

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

如果您确定第一列始终是第n次1:5重复,那么您可以简单地从第二列创建矩阵:

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

或者,您可以按第一列对矩阵进行排序:

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

我认为@Roland的想法比我的解决方案要好:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM