从三个变量的 csv 文件创建邻接矩阵
Create an adjacency matrix from a csv file of three variables
所以我有一个包含三个变量的 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
这创建了邻接矩阵,但我该如何填充它?
这就是你想要的吗?它会像您的第一个示例中那样创建一个包含团队的矩阵。
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
您可以使用 table
来提取结果。
首先,您可能希望为所有团队设置通用级别
lvs <- sort(as.character(unique(unlist(d))))
d[] <- lapply(d, factor, levels=lvs)
然后table
数据
res <- table(d[c("Team.A", "Winner")]) + table(d[c("Team.B", "Winner")])
diag(res) <- 0
res
# Winner
# Team.A Argentina Croatia Germany
# Argentina 0 0 1
# Croatia 1 0 0
# Germany 0 1 0
如果您想要一个特定的顺序,您可以在使用 table
之前将变量设置为因子,或者您可以在
之后更改顺序
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")
所以我有一个包含三个变量的 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
这创建了邻接矩阵,但我该如何填充它?
这就是你想要的吗?它会像您的第一个示例中那样创建一个包含团队的矩阵。
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
您可以使用 table
来提取结果。
首先,您可能希望为所有团队设置通用级别
lvs <- sort(as.character(unique(unlist(d))))
d[] <- lapply(d, factor, levels=lvs)
然后table
数据
res <- table(d[c("Team.A", "Winner")]) + table(d[c("Team.B", "Winner")])
diag(res) <- 0
res
# Winner
# Team.A Argentina Croatia Germany
# Argentina 0 0 1
# Croatia 1 0 0
# Germany 0 1 0
如果您想要一个特定的顺序,您可以在使用 table
之前将变量设置为因子,或者您可以在
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")