R 向列添加行的组合
我有17个430阶的方阵和一个92235 x 34维的大矩阵R 向列添加行的组合,r,matrix,R,Matrix,我有17个430阶的方阵和一个92235 x 34维的大矩阵 对于每个正方形矩阵,我希望将每行的值(从1到430)添加到大矩阵中的一列中,只取主对角线上方的值。因此[1,2][1,3][1,4]…[1430][2,3][2,4]…[2430]…[429430]——因此,大矩阵的92235行长度(此处显示了步骤1的示例) 方阵是转置的 重复步骤1,但将行值添加到大矩阵中的下一列 重复步骤1-3 16次,直到填充大矩阵 我该怎么做呢 短暂性脑缺血发作 编辑以供评论 mat = matrix(1:25
mat = matrix(1:25,5,5)
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
mat2 = cbind(mat[upper.tri(mat)])
mat2
[,1]
[1,] 6
[2,] 11
[3,] 12
[4,] 16
[5,] 17
[6,] 18
[7,] 21
[8,] 22
[9,] 23
[10,] 24
这将先读取列,然后读取行。相反,我希望先读取行,然后读取列,这样结果应该是:
[,1]
[1,] 6
[2,] 11
[3,] 16
[4,] 21
[5,] 12
[6,] 17
[7,] 22
[8,] 18
[9,] 23
[10,] 24
如果有17个方阵('m1'、'm2'、…'m17'),请将它们保存在
列表中,然后使用upper.tri
提取对角线上方的元素,并使用转置中的元素提取cbind
lst1 <- mget(paste0('m', 1:17))
Out <- do.call(cbind,lapply(lst1, function(x) {x1 <- t(x)
cbind(x[upper.tri(x)], x1[upper.tri(x1)]) }))
dim(Out)
#[1] 92235 34
如果有17个方阵('m1'、'm2'、…'m17'),请将它们保存在列表中,然后使用upper.tri
提取对角线上方的元素,并使用转置中的元素提取cbind
lst1 <- mget(paste0('m', 1:17))
Out <- do.call(cbind,lapply(lst1, function(x) {x1 <- t(x)
cbind(x[upper.tri(x)], x1[upper.tri(x1)]) }))
dim(Out)
#[1] 92235 34
如果有17个方阵('m1'、'm2'、…'m17'),请将它们保存在列表中,然后使用upper.tri
提取对角线上方的元素,并使用转置中的元素提取cbind
lst1 <- mget(paste0('m', 1:17))
Out <- do.call(cbind,lapply(lst1, function(x) {x1 <- t(x)
cbind(x[upper.tri(x)], x1[upper.tri(x1)]) }))
dim(Out)
#[1] 92235 34
如果有17个方阵('m1'、'm2'、…'m17'),请将它们保存在列表中,然后使用upper.tri
提取对角线上方的元素,并使用转置中的元素提取cbind
lst1 <- mget(paste0('m', 1:17))
Out <- do.call(cbind,lapply(lst1, function(x) {x1 <- t(x)
cbind(x[upper.tri(x)], x1[upper.tri(x1)]) }))
dim(Out)
#[1] 92235 34
这太棒了!但它似乎将x[upper.tri(x)]绑定到大型矩阵的列,读取[1,2][1,3][2,3][1,4][2,4][3,4]。。。所以先列后行。我如何先读行再读列,所以[1,2][1,3][1,4].[1430][2,3][2,4].[2430].@pophahpop请用一个小数据更新你的帖子(如评论中所示)以及基于此的预期结果。我不明白你的意思comment@DavidArenburg我认为它应该作为一个单独的答案,对吗?这太棒了!但它似乎将x[upper.tri(x)]绑定到大型矩阵的列,读取[1,2][1,3][2,3][1,4][2,4][3,4]。。。所以先列后行。我如何先读行再读列,所以[1,2][1,3][1,4].[1430][2,3][2,4].[2430].@pophahpop请用一个小数据更新你的帖子(如评论中所示)以及基于此的预期结果。我不明白你的意思comment@DavidArenburg我认为它应该作为一个单独的答案,对吗?这太棒了!但它似乎将x[upper.tri(x)]绑定到大型矩阵的列,读取[1,2][1,3][2,3][1,4][2,4][3,4]。。。所以先列后行。我如何先读行再读列,所以[1,2][1,3][1,4].[1430][2,3][2,4].[2430].@pophahpop请用一个小数据更新你的帖子(如评论中所示)以及基于此的预期结果。我不明白你的意思comment@DavidArenburg我认为它应该作为一个单独的答案,对吗?这太棒了!但它似乎将x[upper.tri(x)]绑定到大型矩阵的列,读取[1,2][1,3][2,3][1,4][2,4][3,4]。。。所以先列后行。我如何先读行再读列,所以[1,2][1,3][1,4].[1430][2,3][2,4].[2430].@pophahpop请用一个小数据更新你的帖子(如评论中所示)以及基于此的预期结果。我不明白你的意思comment@DavidArenburg我认为这应该作为一个单独的答案,对吗?