2014-02-07 7 views
29

Ich bin sehr neu in R, also entschuldige ich mich für eine solche grundlegende Frage. Ich verbrachte eine Stunde damit, dieses Thema zu googeln, konnte aber keine Lösung finden.Machen Sie Frequenzhistogramm für Faktorvariablen

Angenommen, ich habe in meinem Datensatz einige kategorische Daten über gängige Haustiertypen. Ich gebe es als Zeichenvektor in R ein, der die Namen verschiedener Tierarten enthält. Ich habe es wie folgt aus:

animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird") 

ich es in einen Faktor für die Verwendung mit anderen Vektoren in meinem Datenrahmen drehen:

animalFactor <- as.factor(animals) 

ich jetzt ein Histogramm erstellt werden soll, der die Frequenz der einzelnen Variablen zeigt auf der y-Achse der Name jedes Faktors auf der x-Achse und enthält für jeden Faktor einen Balken. Ich versuche diesen Code:

hist(table(animalFactor), freq=TRUE, xlab = levels(animalFactor), ylab = "Frequencies") 

Die Ausgabe ist absolut nichts wie ich erwarten würde. Abgesehen von den Problemen bei der Kennzeichnung kann ich nicht herausfinden, wie man ein einfaches Frequenzhistogramm nach Kategorien erstellt.

+0

Histogramme sind für kontinuierliche Daten. Sie möchten ein Balkendiagramm. – lmo

Antwort

54

Es scheint, wie Sie barplot(prop.table(table(animals))) wollen:

enter image description here

Dies ist jedoch nicht ein Histogramm ist.

+9

Wenn Sie nur 'barplot (Tabelle (Tiere))' tun, erhalten Sie das mehr wie ein Histogramm, d. H. Wie zählt ohne Normalisierung. –

14

Der Grund für das unerwartete Ergebnis ist, dass hist(...) die Verteilung aus einem numerischen Vektor berechnet. In Ihrem Code verhält sich table(animalFactor) wie ein numerischer Vektor mit drei Elementen: 1, 3, 7. So plottet hist(...) die Anzahl von 1 (1), die Anzahl von 3 (1) und die Anzahl von 7 (1). @ Rolands Lösung ist die einfachste.

Hier ist ein Weg, dies ggplot mit zu tun:

library(ggplot2) 
ggp <- ggplot(data.frame(animals),aes(x=animals)) 
# counts 
ggp + geom_histogram(fill="lightgreen") 
# proportion 
ggp + geom_histogram(fill="lightblue",aes(y=..count../sum(..count..))) 

Sie würden über genau das gleiche Ergebnis mit animalFactor statt animals im Code.

+0

Siehe [Megatrons Antwort] (https://Stackoverflow.com/a/37622400/4895725) für neuere Versionen von 'ggplot2'. – lmo

2

Land eine kategorische Variable ist, und ich möchte, wie viele Vorkommen von Land im Datensatz vorhanden sind, um zu sehen:

Eine Antwort auf eine ähnliche Frage ist hier gegeben worden.Mit anderen Worten, wie viele Datensätze/Teilnehmer sind von jedem Land

barplot(summary(df$Country)) 
11

Wenn Sie dies in ggplot tun mögen, wurde eine API-Änderung geom_histogram() gemacht, die zu einem Fehler führt: https://github.com/hadley/ggplot2/issues/1465

zu das zu umgehen, verwenden Sie geom_bar():

animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird") 

library(ggplot2) 
# counts 
ggplot(data.frame(animals), aes(x=animals)) + 
    geom_bar() 

enter image description here