[英]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
行,请使用genmat
第k
行,其中k
是genmat
的第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.