2012-04-06 11 views
2

Ich möchte eine Heatmap aus einem All-vs-all-Vergleich generieren. Ich habe die Daten bereits auf 0-1 skaliert. Allerdings habe ich die Werte nur für die Vergleiche auf eine Art und nicht für die Vergleiche zwischen derselben Gruppe (die immer 1 ist), d. H. Ich habe die halbe Matrix und vermisse die andere Hälfte und die Diagonale. Was ist ein guter Weg, um es in eine Form zu bringen, die ggplot2 für die Heatmap verwenden kann? Erweitern Sie den Datenrahmen zum Zeichnen der Heatmap in ggplot2

Dies ist ein Beispiel für die Daten, die ich habe:

A B value 
T1 T2 0.347 
T1 T3 0.669 
T2 T3 0.214 

ich die folgenden Voraussetzungen ist das, was ich für ggplot benötigen (oder vielleicht auch nicht, dass ich tun, wenn ggplot es irgendwie generieren?):

A B value 
T1 T2 0.347 
T1 T3 0.669 
T2 T3 0.214 
T2 T1 0.347 
T3 T1 0.669 
T3 T2 0.214 
T1 T1 1 
T2 T2 1 
T3 T3 1 

Dann würde ich laufen

sorted<-data[order(data$A, data$B), ] 

ggplot(sorted, aes(A, B)) + 
    geom_tile(aes(fill = value), colour = "white") + 
    scale_fill_gradient(low = "black", high = "red") + 

ich diese gelöst haben, aber in (was ich nehme an ist) eine wirklich schlechte Art und Weise invo loving für Schleifen. Es muss einen besseren Weg geben, um vom ersten Datenrahmen zum zweiten zu gelangen!

Prost

Antwort

1

Hmm ... Ich kann eine elegante Einbau in bestehenden vorstellen, aber das sollte den Trick für Sie tun:

# Factors are not your friend here 
options(stringsAsFactors = FALSE) 

# Here's the data you're starting with 
this.half <- data.frame(A = c("T1", "T1", "T2"), 
         B = c("T2", "T3", "T3"), 
         value = c(0.347, 0.669, 0.214)) 


# Make a new data.frame, simply reversing A and B 
that.half <- data.frame(A = this.half$B, 
         B = this.half$A, 
         value = this.half$value) 

# Here's the diagonal 
diagonal <- data.frame(A = unique(c(this.half$A, this.half$B)), 
         B = unique(c(this.half$A, this.half$B)), 
         value = 1) 

# Mash 'em all together 
full <- rbind(this.half, that.half, diagonal) 
+0

Dank! Das ist viel besser als meine Version. Bei R dreht sich alles um das Subsetting und Kombinieren, so scheint es ... – ShellfishGene

Verwandte Themen