如何在 R 中创建一个对称矩阵来计算两列具有相同值的频率?

How to create a symmetric matrix in R counting how often two columns have the same values?

假设我有这样一个数据框:

ID sp1 sp2 sp3
1  NA   1   1
2  0    0   1
3  1    NA  0
4  1    1   1

这是我想要得到的:

ID 1 2 3 4
1  2 1 0 2
2  1 1 0 1
3  0 0 1 1
4  2 1 1 3

此处显示两列具有相同值的次数1

由于原始dataframe很大,希望能找到一种有效的方法来解决这个问题。

非常感谢您的努力。

为了从您的数据创建共现矩阵,您首先需要将您的 NA 转换为 0,然后在没有第一个 ID 的情况下对您的数据进行叉积专栏:

x = data.frame(ID = c(1:4), sp1 = c(NA,0,1,1), sp2 = c(1,0,NA,1), sp3 = c(1,1,0,1))
x[is.na(x)] = 0
crossprod(t(x[-1]))

     [,1] [,2] [,3] [,4]
[1,]    2    1    0    2
[2,]    1    1    0    1
[3,]    0    0    1    1
[4,]    2    1    1    3