我有一些这种形式的数据:
> agreers <- read.csv('agreers.csv')
> attach(agreers)
> head(agreers)
wain1 wain2 count
1 Founder36 Mnist10_269 673
2 Founder3 Mnist10_19 665
3 Mnist10_140 Mnist10_257 663
4 Founder1 Founder15 659
5 Founder21 Founder25 654
6 Founder15 Founder32 654
我创建了这样的数据 wain1 <= wain2
, 所以每对只在表中出现一次。所以这将是一个无向图。
我想创建一个连接矩阵,像这样:
Mnist10_269 Mnist10_19 Mnist10_257 . . .
Founder36 673 ? ?
Founder3 ? 665 ?
Mnist10_140 ? ? 663
. . .
如果 agreers
中没有任何数据,? 将为零.所以这是我尝试过的:
> mat = matrix(0, nrow = length(unique(wain1)), ncol = length(unique(wain2)))
> rownames(mat) = unique(wain1)
> colnames(mat) = unique(wain2)
> for(i in as.integer(rownames(agreers))) mat[wain1[i], wain2[i]] = count[i]
它做了一些,即mat
得到数字更新,但数字不在正确的位置!例如,我希望它返回 673
.
> mat["Founder36","Mnist10_269"]
[1] 0
编辑:这里有更多的数据文件,以显示“因子中的重复水平”问题。请注意,Mnist10_140 在第一列中出现了两次,但在第二列中出现了不同的值。
wain1,wain2,count
Founder36,Mnist10_269,673
Founder3,Mnist10_19,665
Mnist10_140,Mnist10_257,663
Founder1,Founder15,659
Founder21,Founder25,654
Founder15,Founder32,654
Mnist10_140,Mnist10_84,643
当只处理该数据子集时,我收到警告:
> agreers <- read.csv('temp.csv')
> connections <- xtabs(count ~ factor(wain1, levels = wain1) + factor(wain2, levels = wain2), agreers)
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
最佳答案
如果你喜欢 base R,你可以使用 table
df <- read.table(header=TRUE, text=' wain1 wain2 count
Founder36 Mnist10_269 673
Founder3 Mnist10_19 665
Mnist10_140 Mnist10_257 663
Founder1 Founder15 659
Founder21 Founder25 654
Founder15 Founder32 654')
tab <- with(df,table(factor(wain1, levels=unique(wain1)),
factor(wain2, levels=unique(wain2))))
tab[which(tab == 1)] = df$count
tab
Mnist10_269 Mnist10_19 Mnist10_257 Founder15 Founder25 Founder32
Founder36 673 0 0 0 0 0
Founder3 0 665 0 0 0 0
Mnist10_140 0 0 663 0 0 0
Founder1 0 0 0 659 0 0
Founder21 0 0 0 0 654 0
Founder15 0 0 0 0 0 654
编辑
正如@DavidArenburg 所建议的,您还可以使用 xtabs
xtabs(count ~ factor(wain1, levels = unique(wain1)) + factor(wain2, levels = unique(wain2)), df)
关于r - 从 R 中的数据框创建连接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501419/