将两个字符和一个值的数据帧转换为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
我有一个 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