如何在 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
假设我有这样一个数据框:
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