2017-01-11 8 views
0

Ich möchte eine Reihe von Beobachtungen & herausfinden, wie viel Überlappung haben verschiedene Spalten auf der Grundlage der Indikatoren. Ich habe folgende Daten: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 | 

ich folgende Daten überlappen Matrix erstellen möchten:

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

So zum Beispiel Z insgesamt 4 Beobachtungen hat. 2 seiner 4 Beobachtungen sind auch auf X vorhanden, so dass seine Überlappung% 50% beträgt. Da jedoch unterschiedliche Spalten unterschiedliche Beobachtungszahlen haben, ist das Gegenteil nicht unbedingt der Fall. Wie Sie sehen können, teilen sich 2 von 3 Beobachtungen in X mit Z, also überlappen sie sich um 66%.

Antwort

4

können Sie crossprod verwenden:

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