これは、単純な行列乗算です。
t(m) %*% m
a b c d e
a 2 1 1 0 0
b 1 2 1 0 0
c 1 1 3 1 0
d 0 0 1 1 0
e 0 0 0 0 0
このデータを使用して:
m = read.table(text = "ID a b c d e
1 1 0 1 0 0
2 0 1 1 0 0
3 0 0 1 1 0
4 1 1 0 0 0", header = T)
m = as.matrix(m[, -1])
をこれは、元の行列のみが1と0であることに依存しています。私のラップトップ上で
library(Matrix)
nr = 2e6
nc = 70
mm = Matrix(0, nrow = nr, ncol = nc, sparse = T)
# make, on average, three 1s per row
set.seed(47)
mm[cbind(sample(nr, size = 3 * nr, replace = T), sample(nc, size = 3 * nr, replace = T))] = 1
system.time({res = t(mm) %*% mm})
# user system elapsed
# 0.836 0.057 0.895
format(object.size(res), units = "Mb")
[1] "0.1 Mb
を計算は秒未満を取り、結果はおよそ次のとおりです。そうでない場合は、あなたが記述のようにここでは、行列に取り組んでいますm = original_matrix > 0
でそれを作成することができます0.1Mb。
小さな再現可能な例を投稿できますか?コピー/ペースト可能なものが最適です。サンプル入力を生成するためのコードを共有する( 'dput()'はこれには便利です)、その入力に対して望ましい出力を表示します。 – Gregor
確かに、私はそれを投稿しました。ありがとう – user40076