我正在尝试将具有两列的矩阵转换为另一种形式的矩阵。将两者结合起来的是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
答案 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在拆散时的想法比我的解决方案更好:)