2017-06-27 6 views
2

In diesem einfachen Beispiel versuche ich die Anzahl der Schüler zu sehen, die dieselbe Klasse teilen. Das ist, was ich erfunden habe, aber ich würde gerne wissen, wie man das ohne Schleifen macht und wie man zeigt, welche Schüler (oder Positionen P1, P2, P3, P4) eine Klasse teilen. Wenn dies Zahlen wären, würde ich denken, dass dies einfach durch eine Korrelationsmatrix geschehen würde, aber angesichts der kategorischen Natur bin ich mir nicht sicher, wie ich anders darüber vorgehen soll.Eine Heatmap ähnlicher Zeilen basierend auf kategorischen Werten erstellen

DF <- (data.frame(row.names= c("ClassA", "ClassB","ClassC","ClassD","ClassE","ClassF"), 
       P1=c("John","John","Dave","Patrick","Steve","John"), 
       P2=c("Jim","Jim","Robert","Matt","Jim","Ben"), 
       P3=c("Marty","Mike","Stu","Geoff","Mike","Leif"), 
       P4=c("Mark","Mark","Tim","Moby","Chester","Larry"))) 


DFtally <- matrix(ncol=6, nrow=6) 
for (i in 1:dim(DF)[1]) { 
    for (j in 1:dim(DF)[1]) { 
    DFtally[i,j] <- length(intersect(t(DF[i,]),t(DF[j,]))) 
    } 
} 

library(plotly) 
p <- plot_ly(z = DFtally, type = "heatmap") 
p 

enter image description here

Antwort

1

Versuchen Sie folgendes:

DF2 <- split(as.matrix(DF), 1:nrow(DF)) 
DF2 <- crossprod(table(stack(DF2))) 
DF2 

#  ind 
# ind 1 2 3 4 5 6 
#  1 4 3 0 0 1 1 
#  2 3 4 0 0 2 1 
#  3 0 0 4 0 0 0 
#  4 0 0 0 4 0 0 
#  5 1 2 0 0 4 0 
#  6 1 1 0 0 0 4 
Verwandte Themen