# How to organize a list of covariance pairs in a squared covariance matrix?

I am working in R and I have a tibble composed of three columns:

`V1`

: the name of the first variable`V2`

: the name of the second variable`cov`

: the value of the covariance between`V1`

and`V2`

.

This tibble is expanded over `n`

columns for `n`

covariance pairs.

I would like to get a matrix that looks like a classical covariance matrix, ie a square `n`

x `n`

matrix with the covariance pairs in it.

Any idea how could I implement this?

Something along the lines of

`## find row/column names n <- unique(c(dd$V1,dd$V2)) ## construct matrix M <- matrix(NA, length(n),length(n), dimnames=list(n,n)) ## fill in values M[cbind(dd$V1,dd$V2)] <- dd$V3 `

If you only have the lower/upper triangle in your initial data set you’ll need something like `M[lower.tri(M)] <- t(M)[upper.tri(M)]`

to symmetrize …

You could construct a sparse matrix:

`DF <- data.frame(var1 = c("a", "a", "b", "a", "b", "c"), var2 = c("b", "c", "c", "a", "b", "c"), cov = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6)) DF$var1 <- factor(DF$var1, levels = sort(unique(c(DF$var1, DF$var2)))) DF$var2 <- factor(DF$var2, levels = levels(DF$var1)) library(Matrix) sparseMatrix(i = as.integer(DF$var1), j = as.integer(DF$var2), x = DF$cov, dimnames = list(levels(DF$var1), levels(DF$var2)), symmetric = TRUE) #3 x 3 sparse Matrix of class "dsCMatrix" # a b c #a 0.4 0.1 0.2 #b 0.1 0.5 0.3 #c 0.2 0.3 0.6 `

Use `as.matrix`

to create a dense matrix if you need one.