组合矩阵及其转置以获得方形对称矩阵

时间:2017-11-03 17:18:53

标签: r matrix data-manipulation

形式的矩阵,例如,

     getObjectWithoutKnowingKey(data) {
    let objects = [];
    for (var propName in data) {
      if (data.hasOwnProperty(propName)) {
        objects.push(data[propName]);
      }
    }
    return objects;
  }

我想结合这个矩阵及其转置来获得一个形式的方阵

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" 及其转置。即,1,2,10,14和15列的输出矩阵元素与genmat的对应列和genmat的相应转置行相同。

1 个答案:

答案 0 :(得分:2)

我真的不确定我理解这个问题,但这似乎给出了预期的输出:

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

它的作用:对于结果的i行,使用k的{​​{1}}行genmat,其中k是第一行的索引NA igenmat的{​​{1}}值。

在非常明确的简单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的对称性。对称性来自您的示例数据的一些非显式特征。

相关问题