2016-04-13 9 views
1

Ich suche Rat für die beste Weise, die Häufigkeitszählungen für den Bereich in einer Spalte von meinem Datenrahmen darzustellen.Ratschläge für den besten Weg, Frequenzdaten zu plotten

Beispiel:

my_table<- data.frame('xcat' = c(1,1,1,2,2,2,5,10,10,10,11,11,11,14,14,14, 
          15,15,15, 17,17,17, 18,18,18,20,20,20)) 

In dem obigen Datenrahmen, mag ich von 1 bis 20 Eine Möglichkeit, die Frequenzen plotten zu tun, wäre es hist werden(), Binabmessung auf 1 gesetzt, das heißt:

Wie Sie sehen können, habe ich einen Offset von 0,5 hinzugefügt, so dass jedes Bin auf der entsprechenden Ganzzahl angezeigt wird. Eine andere Möglichkeit, es zu tun wäre, um eine Tabelle mit den Zählungen zu erstellen, dann Intervalle erzeugen:

my_tablecut = cut(my_table$xcat, breaks= seq(from =0.5, to =20.5, 
             by = 1), right=FALSE) 
my_tablefreq = as.data.frame(table(my_tablecut)) 
my_tablefreq$pos<- 1:nrow(my_tablefreq) 
plot(my_tablefreq$pos, my_tablefreq$Freq, type = 'l') 

Wie ich schreibe, merke ich, kann es richtig sein, ein Balkendiagramm zu verwenden, anstatt ein Histogramm; In diesem Fall müsste ich allerdings noch die Kategorien mit der Häufigkeit 0 erzeugen, wahrscheinlich immer noch mit der "cut" -Funktion, und dann nach "barplot" statt nach "plot".

Ich frage mich, ob es irgendwelche Nachteile dieser Methoden gibt, oder was wäre eine geeignetere Art zu zeigen, was ich will. Bitte lassen Sie mich wissen, wenn mein Zweck nicht klar ist, oder ich muss weitere Details hinzufügen.

Antwort

2
> table(my_table) 
my_table 
1 2 5 10 11 14 15 17 18 20 
3 3 1 3 3 3 3 3 3 3 

Der Nachteil ist, dass table keine Einstellung der Binabmessung zulässt. In Ihrem Fall ist die Anpassung an die Anforderungen perfekt, da Sie eine Bin-Größe von 1 angefordert haben. ermöglicht die Angabe von Bin-Grenzen und lässt sogar zu, ob es die linke oder rechte Grenze ist, die nahe (oder offen) ist. Meine Präferenz ist für links geschlossen, was nicht der Standard ist.

hist gibt die Pausen und die Zählungen in den Pausen (und noch mehr), während barplot nur Stellplätze:

> my_hist 
$breaks 
[1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5 
[18] 17.5 18.5 19.5 20.5 

$counts 
[1] 3 3 0 0 1 0 0 0 0 3 3 0 0 3 3 0 3 3 0 3 

$density 
[1] 0.10714286 0.10714286 0.00000000 0.00000000 0.03571429 0.00000000 0.00000000 0.00000000 
[9] 0.00000000 0.10714286 0.10714286 0.00000000 0.00000000 0.10714286 0.10714286 0.00000000 
[17] 0.10714286 0.10714286 0.00000000 0.10714286 

$mids 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

$xname 
[1] "my_table$xcat" 

$equidist 
[1] TRUE 

attr(,"class") 
[1] "histogram" 
1

Ich ziehe diese verwenden:

plot(density(my_table$xcat)) 

enter image description here

Diese erleichtert auch das Überlagern anderer Frequenzen, zB:

my_table$xcatNew <- c(1,1,1,1,1,1,1,1,1,1,11,12,14,14,14,14, 
         15,15,15, 17,17,17, 18,18,18,18,20,20) 

plot(density(my_table$xcat)) 
lines(density(my_table$xcatNew), col = "red") 

enter image description here