【问题标题】:How to create a symmetric matrix in R counting how often two columns have the same values?如何在 R 中创建一个对称矩阵,计算两列具有相同值的频率?
【发布时间】:2020-04-17 15:37:42
【问题描述】:

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

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 的次数。

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

非常感谢您的努力。

【问题讨论】:

  • 4:4中的单元格不应该是3吗?
  • @Lamia 是的,非常感谢。我已经修改过了。

标签: r dplyr data.table symmetric


【解决方案1】:

为了从您的数据创建一个共现矩阵,您首先需要将您的 NAs 转换为 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

【讨论】:

  • 谢谢@Lamia 我认为这是我需要的。但也许我的数据太大了,结果出现错误“无法分配大小为 500Gb 的向量”。谢谢大家,我会尝试对数据集进行子集化。
  • 看看Matrix 包中稀疏矩阵的交叉产品。它应该更节省内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多