我有5个(旧)暗淡的Constants.DATE_NAME + " DESC"
矩阵。我想创建1000个新的dim 1000*35
矩阵,以便从5个旧矩阵的第一行创建第一个矩阵。第二个矩阵是从5个旧矩阵的第二行创建的,依此类推。
我该怎么办?请指导我。
答案 0 :(得分:1)
首先cbind
所有五个旧矩阵(称之为m1, ..., m5
),然后为apply
new.matrices <- apply(cbind(m1, m2, m3, m4, m5), 1, function(row) matrix(row, 5, 35))
这为您提供了新矩阵的列表。
答案 1 :(得分:0)
要使用此处发布的示例,rbind
所有矩阵,请执行以下操作:
A=rbind(matrix1, matrix2, matrix3, matrix4, matrix5)
lapply(0:(nrow(A)/5-1),function(x)A[1:5+5*x,])
这比分割数据要快得多。
答案 2 :(得分:0)
首先,我在这里解析了这个问题:
问题:将{ n 行 i 行和 j 列}转换为{ i n 行和 j 列}的矩阵
约束新矩阵的 x y 等于旧矩阵中的行 y X
以下是我建议的,通用的解决方案(尺寸小于
在提出的问题中,为了介绍)。结果是
和@ ANG的答案一样,但是我们可以避免写出for
循环,
并且必须减少写出原始矩阵的手工工作。
n <- 3 # number of old matrices
i <- 5 # number of rows in old matrices
j <- 4 # number of columns in old matrices
# Create a list containing the original matrices.
old_matrices <- lapply(seq_len(n), matrix, nrow = i, ncol = j)
# Paste all the original matrices together by column.
m <- do.call(cbind, old_matrices)
大矩阵m
的每一行现在代表一个新的矩阵
它的行连接在一起形成一个向量。
# Construct the new matrices from the rows in the big matrix.
new_matrices <- tapply(m, row(m), matrix, nrow = n, byrow = T)
然后进行一些检查以确保我们做了我们应该做的事情:
new_matrices[[1]]
#> [,1] [,2] [,3] [,4]
#> [1,] 1 1 1 1
#> [2,] 2 2 2 2
#> [3,] 3 3 3 3
# Check that there's the right number of new matrices
length(new_matrices) == i
#> [1] TRUE
# Check that the new matrices all have the correct dimensions
all(vapply(new_matrices, function(m) all.equal(dim(m), c(n, j)), logical(1)))
#> [1] TRUE
# Check that the constraint holds
all(vapply(seq_along(new_matrices), function(y) {
vapply(seq_along(old_matrices), function(x) {
all.equal(new_matrices[[y]][x, ], old_matrices[[x]][y, ])
}, logical(1))
}, logical(n)))
#> [1] TRUE
答案 3 :(得分:-1)
您还可以使用for()
循环。这是一个详细的例子
# old matrices
old.mat1 <- matrix(data = sample(35000), nrow = 1000, ncol = 35)
old.mat2 <- matrix(data = sample(35000), nrow = 1000, ncol = 35)
old.mat3 <- matrix(data = sample(35000), nrow = 1000, ncol = 35)
old.mat4 <- matrix(data = sample(35000), nrow = 1000, ncol = 35)
old.mat5 <- matrix(data = sample(35000), nrow = 1000, ncol = 35)
rbind(old.mat1[1, ], old.mat2[1, ], old.mat3[1, ], old.mat4[1, ],
old.mat5[1, ]) # how we will build new matrices
dim(rbind(old.mat1[1, ], old.mat2[1, ], old.mat3[1, ], old.mat4[1, ],
old.mat5[1, ])) # you can see that dim is 5*35
new.mat <- list() # list of new matrices
for(i in 1:1000){
new.mat[[i]] <- rbind(old.mat1[i, ], old.mat2[i, ], old.mat3[i, ],
old.mat4[i, ], old.mat5[i, ])
}
new.mat1 <- new.mat[[1]] # first new matrix
length(new.mat) # new.mat contains the 1000 new matrices