所以我有一个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
这将创建邻接矩阵,但是我该如何填写?
答案 0 :(得分:1)
您可以使用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")
答案 1 :(得分:0)
这是您的追求吗?它与第一个示例中的团队一样创建了一个矩阵。
Iterator it = list.iterator();
while (it.hasNext()) {
Object thing = it.next();
if (ThisIsTheObjectWeAreLookingFor(thing)) {
it.remove();
list.addFirst(thing);
return thing;
}
}