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