在 R 中创建 % 重叠矩阵

Create % overlap matrix in R

我想进行一组观察并根据指标找出不同列的重叠程度。我有以下数据:

uniquevalue |  X   |   Y   |    Z   |
Obs 1       |  1   |   0   |    1   |
Obs 2       |  1   |   1   |    0   |
Obs 3       |  1   |   0   |    1   |
Obs 4       |  0   |   1   |    0   |
Obs 5       |  0   |   0   |    1   |
Obs 6       |  0   |   1   |    0   |
Obs 7       |  0   |   0   |    1   |

我想创建以下数据重叠矩阵:

Label  |   X  |   Y  |   Z  |
X      | 100% |  33% |  50% |
Y      |  33% | 100% |   0% |
Z      |  66% |   0% | 100% |

因此,例如,Z 共有 4 个观察值。它的 4 个观测值中有 2 个也出现在 X 上,因此它的重叠率为 50%。然而,因为不同的列有不同数量的观测值,反之则不一定成立。如您所见,X 中的 3 个观测值中有 2 个与 Z 共享,因此重叠率为 66%。

您可以使用 crossprod:

mat <- crossprod(as.matrix(df[2:4]))            # calculate the overlap               
floor(t(mat * 100 / diag(mat)))                 # calculate the percentage

#    X   Y   Z
#X 100  33  50
#Y  33 100   0
#Z  66   0 100