df.long = data.frame(one=c('a','a','a','b','b','c'),
two=c('b','c','d','c','d','d'),
value=c(1,2,3,4,5,6) )
df.long
## one two value
## 1 a b 1
## 2 a c 2
## 3 a d 3
## 4 b c 4
## 5 b d 5
## 6 c d 6
v <- unique(c(df.long$one, df.long$two))
mx <- sapply(v, function(x) {
sapply(v, function(y) {
df.long[df.long$one %in% c(x, y) & df.long$two %in% c(x, y), "value"]
})
})
diag(mx) <- 0
mx
## a b c d
## a 0 1 2 3
## b 1 0 4 5
## c 2 4 0 6
## d 3 5 6 0
#ref https://stackoverflow.com/questions/31095422/reconstruct-symmetric-matrix-from-values-in-long-form