我想采取一系列观察&根据指标找出不同列的重叠程度。我有以下数据:
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%重叠。
答案 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