R 从包含三个变量的csv文件创建邻接矩阵

R 从包含三个变量的csv文件创建邻接矩阵,r,adjacency-matrix,R,Adjacency Matrix,因此,我有一个csv文件,其中包含三个变量“Team 1”、“Team 2”和“Winner” 我想创建一个具有rownames=colnames的邻接矩阵。有什么办法可以做到这一点吗?这就是我想要的: A B C A 0 2 1 B 1 0 3 C 2 4 0 所以这个特殊的矩阵表示A赢了B 1次,B赢了A 2次,以此类推。行名表示优胜者 例如,如果我的数据如下所示: Team A Team B Winner Germany

因此,我有一个csv文件,其中包含三个变量“Team 1”、“Team 2”和“Winner” 我想创建一个具有rownames=colnames的邻接矩阵。有什么办法可以做到这一点吗?这就是我想要的:

   A B C
A  0 2 1    
B  1 0 3    
C  2 4 0
所以这个特殊的矩阵表示A赢了B 1次,B赢了A 2次,以此类推。行名表示优胜者

例如,如果我的数据如下所示:

   Team A       Team B      Winner
  Germany    Argentina     Germany
  Croatia      Germany     Croatia
Argentina      Croatia   Argentina
将给出矩阵

            Germany Argentina   Croatia 
Germany           0         0         1  
Argentina         1         0         0  
Croatia           0         1         0
我的代码

data = as.matrix(read.csv("data.csv"))

labels = unique(c(data[,1],data[,2]))
A = matrix(0, length(labels),length(labels))

rownames(A) = colnames(A) <- labels
A
data=as.matrix(读取.csv(“data.csv”))
标签=唯一(c(数据[,1],数据[,2]))
A=矩阵(0,长度(标签),长度(标签))

rownames(A)=colnames(A)这就是你想要的吗?它创建了一个矩阵,其中包含第一个示例中所示的团队

x = cbind(c(0, 1, 2), c(2, 0, 4), c(1, 3, 0))

colnames(x) <- c("Germany","Argentina","Croatia")
rownames(x) <- c("Germany","Argentina","Croatia")

x
x=cbind(c(0,1,2),c(2,0,4),c(1,3,0))

colnames(x)您可以使用
table
提取结果

首先,您可能希望为所有团队设置通用级别

lvs <- sort(as.character(unique(unlist(d))))
d[] <- lapply(d, factor, levels=lvs)
如果需要特定的顺序,可以在使用
之前将变量设置为factor,也可以在使用后更改顺序

vars <- c("Germany", "Argentina","Croatia")
res[vars, vars]

vars请提供一个最小的可复制示例。这到底意味着什么?没有真正测试,但
表(d[c(1,3)])+表(d[c(2,3)]
足够了吗?(其中
d
是您的数据帧)编辑:并希望将对角线设置为零<代码>诊断(结果)正常,因此它确实有效!对角线的东西把我弄糊涂了。非常感谢。基本上,我有一个庞大的数据集,只有球队名称和比赛的获胜者。我想把它转换成邻接矩阵。这只是一个简单的例子。这个数据集中有三列:第一队、第二队和胜利者。你想看这里显示的内容吗?是的,像这样,但是没有分数。我只想显示赢了多少场比赛。就像上面的例子一样,这里有一些例子可能会有所帮助:
vars <- c("Germany", "Argentina","Croatia")
res[vars, vars]
d <- read.table(header=T, text="'Team A'       'Team B'      Winner
  Germany    Argentina     Germany
  Croatia      Germany     Croatia
Argentina      Croatia   Argentina")