R语言中上三角矩阵转换为三元组形式及相互转换
1、
dat <- matrix(c(3, 7, 1, 2, 4, 9, 8, 5, 0, 15, 22, 77, 11, 44, 33, 88), nrow = 4) dat lines <- nrow(dat) * (nrow(dat) - 1)/2 + nrow(dat) lines res <- data.frame(a = rep(0, lines), b = rep(0, lines), c = rep(0, lines)) res k <- 0 q <- 0 for (i in 1:nrow(dat)) { q <- q + 1 for (j in q:ncol(dat)) { k <- k + 1 res[k, 1] <- i res[k, 2] <- j res[k, 3] <- dat[i, j] } } res
2、三元组形式(上三角矩阵)转换为矩阵的形式
res res2 <- matrix(0, nrow = length(unique(res$a)), ncol = length(unique(res$b))) res2 res2[as.matrix(res[,1:2])] <- res[,3] res2 <- res2 + t(res2) - diag(diag(res2)) res2