如何创建一个关联矩阵

4

我希望使用R语言创建一个关系矩阵。
我有一个包含3列的文件,如下所示:

#   id  x   y
# 1  A 22   2
# 2  B  4  21
# 3  C 21 360
# 4  D 26   2
# 5  E 22  58
# 6  F  2 347

我希望获得一个像这样的矩阵(不需要列和行名称):

#   2 4 21 22 26 58 347 360
# A 1 0  0  1  0  0   0   0
# B 0 1  1  0  0  0   0   0
# C 0 0  1  0  0  0   0   1
# D 0 1  0  0  1  0   0   0
# E 0 0  0  1  0  1   0   0
# F 1 0  0  0  0  0   1   0

数据

df1 <- structure(list(id = c("A", "B", "C", "D", "E", "F"),
                      x = c(22L, 4L, 21L, 26L, 22L, 2L),
                      y = c(2L, 21L, 360L, 2L, 58L, 347L)),
                 .Names = c("id", "x", "y"), class = "data.frame", row.names = c(NA, -6L))

你的矩阵第一列是否以字母开头? - Gynteniuxas
是的,在原始文件中,第一列是名称。 - godines
1
在您期望的输出中,第D行第2列应该是值为1而不是0,第D行第4列应该是0而不是1。其余正确。 - Sowmya S. Manian
是的,Sowmya,你说得对。我的错误。谢谢。 - godines
2个回答

4
我们可以对数据集进行融合,然后使用表格进行尝试。
library(reshape2)
table(melt(df1, id.var="id")[-2])

或者只使用基础R

table(df1$id[row(df1[-1])], unlist(df1[-1]))
#    2 4 21 22 26 58 347 360
#  A 1 0  0  1  0  0   0   0
#  B 0 1  1  0  0  0   0   0
#  C 0 0  1  0  0  0   0   1
#  D 1 0  0  0  1  0   0   0
#  E 0 0  0  1  0  1   0   0
#  F 1 0  0  0  0  0   1   0

2

你可以使用 cbind.data.frame() 函数与 table() 函数一起使用。

> table(cbind.data.frame(ID=df1$id,Result=c(df1$x,df1$y)))
             Result
  ID  2 4 21 22 26 58 347 360
   A  1 0  0  1  0  0   0   0
   B  0 1  1  0  0  0   0   0
   C  0 0  1  0  0  0   0   1
   D  1 0  0  0  1  0   0   0
   E  0 0  0  1  0  1   0   0
   F  1 0  0  0  0  0   1   0

用Julia语言怎么样? 你也使用这种语言吗? 谢谢! - godines
@GersonOliveiraJunior 不,我从未使用过那种语言。 - Sowmya S. Manian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接