我有一个数据框,它看起来有点像以下代码产生的结果(但要大得多)
set.seed(10)
mat <- matrix(rbinom(200, size=1, prob = .5), ncol = 10)
在这些列中,数字1表示一个观察值对特定问题感兴趣。我想生成一个网络,比较所有的观察值,并统计每个二元组共同感兴趣的问题数量。
我已经编写了下面的代码,看起来工作得很好:
mat2 <- matrix(NA,20,20)
for(i in 1:nrow(mat)){
for(j in 1:nrow(mat)){
mat2[i,j] <- sum(as.numeric(mat[i,]==1) + as.numeric(mat[j,]==1) == 2)
}
}
我将每一条记录与其他所有记录进行比较,只有当两个记录都有一个输入(即它们对此感兴趣),这时才会计为该主题的共同兴趣。
我的问题是我的数据集非常大,而循环现在已经运行了数小时。
是否有人有想法可以避免使用循环来完成这个任务?
mat %*% t(mat)
- Tomtcrossprod(mat==1)
。它非常快速。请将其发布为答案! - jogo