在R中创建%重叠矩阵

时间:2017-01-11 01:14:14

标签: r matrix overlap

我想采取一系列观察&根据指标找出不同列的重叠程度。我有以下数据:

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%重叠。

1 个答案:

答案 0 :(得分:5)

您可以使用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