2017-01-15 7 views
2

Ich habe diesen Datenrahmen:Wie zeichnet man einen Datenrahmen mit mehreren Frequenzen für einen Faktor?

df <- data.frame(make = c("dodge", "dodge", "toyota", "ford", "dodge", "toyota","toyota","ford", "ford", "dodge"), 
        grn = c( 1,  1,  NA,  1,  NA,  NA,  1,   1,  NA,  NA), 
        blu = c( NA,  NA,  1,  NA, 1,  NA,  NA,  NA,  1,  NA), 
        blk = c( NA,  NA,  NA,  NA, NA,  1,  NA,  NA,  NA,  1)) 

Ich versuche, eine Handlung mit „make“ auf der x-Achse und die Gesamt „make“ zählt für die y-Achse zu erzeugen und füllen die Farben. Ich denke, ich muss eine Zählungstabelle für die Marke und die Farbe machen, bin aber unsicher, wie man das macht. Zum Beispiel würde die Tabelle wie folgt aussehen:

DF <- read.table(text = "make grn blu blk 
          dodge 2 1 1 
          ford 2 1 0 
          toyota 1 1 1", header = TRUE) 

Dann ist die Lösung ziemlich geradlinig

library(reshape2) 
library(ggplot2) 

DF1 <- melt(DF, id.var="make") 

ggplot(DF1, aes(x = make, y = value, fill = variable)) + 
geom_bar(stat = "identity") 

So wie kann ich meine Datenrahmen „df“ in „DF“ verwandeln?

Antwort

2

können Sie dplyr::summarise_all verwenden:

library(dplyr) 
df %>% group_by(make) %>% summarise_all(sum, na.rm=TRUE) 

# A tibble: 3 × 4 
# make grn blu blk 
# <fctr> <dbl> <dbl> <dbl> 
#1 dodge  2  1  1 
#2 ford  2  1  0 
#3 toyota  1  1  1 
3

Nun, Sie müssen alle diese Transformation nicht machen. Die kürzere Art der Erstellung des Plots:

df %>% 
    gather(key=col, value=num, -make) %>% 
    na.omit() %>% 
    ggplot(aes(make, fill=col)) + 
    geom_bar() 

Die ersten drei Zeilen erstellen die Langform der Eingabedaten. Dann wird es an ggplot übergeben, um die statistischen Transformationen für Sie vorzunehmen.

Verwandte Themen