将两个字符和一个值的数据帧转换为R中的三角矩阵

Convert dataframe of two characters and a value into a trinagle matrix in R

我有一个 dataframe/tibble 这样的:

d <- data.frame(groupa = c("A", "A", "A", "B", "B", "C"), 
                groupb = c("A", "B", "C", "B", "C", "C"), 
                val = c(0, 1.1, 2.0, 0, 2.5, 0))

>d
  groupa groupb val
1      A      A 0.0
2      A      B 1.1
3      A      C 2.0
4      B      B 0.0
5      B      C 2.5
6      C      C 0.0

我想把它变成这样的成对矩阵:

       A   B   C
     A 0  
     B 1.1 0   0 
     C 2.0 2.5 0

我想不出有什么方法可以让 groupa 的每个值成为一列,groupb 成为一行,并将该值作为矩阵中的交点。 非常感谢 tidyverse 方法!

我们可以使用 base R

中的 xtabs
xtabs(val ~ groupb + groupa, d)

-输出

    groupa
groupb   A   B   C
     A 0.0 0.0 0.0
     B 1.1 0.0 0.0
     C 2.0 2.5 0.0