形式的矩阵,例如,
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
的相应转置行相同。
答案 0 :(得分:2)
我真的不确定我理解这个问题,但这似乎给出了预期的输出:
genmat[apply(genmat, 2, function(col) match(TRUE, !is.na(col))), ]
它的作用:对于结果的i
行,使用k
的{{1}}行genmat
,其中k
是第一行的索引NA
i
列genmat
的{{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
的对称性。对称性来自您的示例数据的一些非显式特征。