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