[英]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.