在 R 中制作加权边列表,就像对数据框一样

use*_*497 4 r

我有一个包含三列的数据集。

X = c("x", "y", "z", "x", "y", "w")
Y = c("a", "b", "c" , "b", "a", "c")
set.seed(3)
Z = sample(10,6)
dat = data.frame(X, Y, Z)
Run Code Online (Sandbox Code Playgroud)

数据看起来像

 X Y Z
1 x a 2
2 y b 8
3 z c 4
4 x b 3
5 y a 9
6 w c 6
Run Code Online (Sandbox Code Playgroud)

我想将上述数据转换为行为 X、列为 Y、矩阵中的值为 Z 的格式。本质上我想要以下内容:

    a   b    c
x   2   3    0
y   9   8    0
z   0   0    4
w   0   0    6
Run Code Online (Sandbox Code Playgroud)

这有点类似于边列表到邻接矩阵,只是数据矩阵不是方形的。请帮忙。谢谢!

akr*_*run 5

尝试

library(reshape2)
acast(dat, X~Y, value.var='Z', fill=0)
Run Code Online (Sandbox Code Playgroud)

按照预期结果按顺序获取行

acast(dat, factor(X, levels=unique(X))~Y, value.var='Z', fill=0)
Run Code Online (Sandbox Code Playgroud)

或者正如@thelatemail 评论的那样

xtabs(Z~X+Y, data= dat)[unique(dat$X),]
Run Code Online (Sandbox Code Playgroud)

或者如果两列均不按顺序,则修改版本

with(dat, xtabs(Z ~ X + Y)[unique(X), unique(Y)])
Run Code Online (Sandbox Code Playgroud)

  • 因为我很烦人 - `with(dat, xtabs(Z ~ X + Y)[unique(X), unique(Y)])` 可能会把它全部包起来。 (2认同)