繁体   English   中英

合并一个矩阵及其转置得到平方对称矩阵

[英]Combine a matrix and its transpose to get a square symmetric matrix

形式如下的矩阵:

structure(c("W1", NA, NA, NA, NA, "W1", NA, NA, NA, NA, NA, "W2", 
NA, NA, "W2", NA, "W2", NA, NA, "W2", NA, NA, "W3", "W3", NA, 
NA, "W2", NA, NA, "W2", NA, NA, "W3", "W3", NA, NA, NA, "W3", 
"W3", NA, NA, NA, NA, NA, NA, "W1", NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, "W2", NA, NA, "W2", "W1", NA, 
NA, NA, NA, "W1", NA, NA, NA, NA), .Dim = c(5L, 15L))

genmat



    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 
[2,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   
[3,] NA   NA   NA   NA   "W3" NA   "W3" "W3" NA   NA    NA    NA    NA    NA    NA   
[4,] NA   NA   NA   NA   "W3" NA   "W3" "W3" NA   NA    NA    NA    NA    NA    NA   
[5,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   

我想将这个矩阵及其转置组合起来,得到一个形式的方矩阵,

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
 [1,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 
 [2,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 
 [3,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   
 [4,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   
 [5,] NA   NA   NA   NA   "W3" NA   "W3" "W3" NA   NA    NA    NA    NA    NA    NA   
 [6,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   
 [7,] NA   NA   NA   NA   "W3" NA   "W3" "W3" NA   NA    NA    NA    NA    NA    NA   
 [8,] NA   NA   NA   NA   "W3" NA   "W3" "W3" NA   NA    NA    NA    NA    NA    NA   
 [9,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA    NA    NA   
[10,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 
[11,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA    NA    NA   
[12,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA    NA    NA   
[13,] NA   NA   "W2" "W2" NA   "W2" NA   NA   NA   NA    NA    NA    "W2"  NA    NA   
[14,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 
[15,] "W1" "W1" NA   NA   NA   NA   NA   NA   NA   "W1"  NA    NA    NA    "W1"  "W1" 

该矩阵取自genmat的genmat及其转置。 也就是说,第genmat和15列的输出矩阵的元素与genmat相应列和genmat的转置行genmat

我真的不确定我是否理解这个问题,但这似乎可以提供预期的输出:

genmat[apply(genmat, 2, function(col) match(TRUE, !is.na(col))), ]

它的作用:对于结果的第i行,请使用genmatk行,其中kgenmat的第i列的第一个非NA值的genmat

在非常明确的普通for循环中,它看起来像:

res <- matrix(NA_character_, nrow = NCOL(genmat), ncol = NCOL(genmat))

for (i in seq_len(NROW(res))) {
  first_non_NA <- which(!is.na(genmat[, i]))[1]
  res[i, ] <- genmat[first_non_NA, ]
}

注意:这不能保证res的对称性。 对称性来自示例数据的某些非显式特征。

暂无
暂无

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

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