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

 

posted @ 2022-06-15 21:09  小鲨鱼2018  阅读(224)  评论(0)    收藏  举报