2017-11-24 3 views
0

Ich habe eine Daten wie unten. Wenn ich die Häufigkeitsverteilung finden möchte, kann ich den hist Befehl wie unten verwenden und histz$breaks und histz$counts finden Anzahl der Beobachtungen, die in jeden Bereich fallen.R erhalten Häufigkeitsverteilung durch eine kategorische oder Faktor Spalte

Ich möchte die Verteilung der Spalte b nach Wert in Spalte a erhalten. Meine Spalte a wird 6 verschiedene Werte haben.

Meine erwartete Ausgabe ist ein Datenrahmen, der

  • 1. Säule haben würde - Bruchwert
  • 2. Spalte - bei der ersten Spalte der Versuchswert hat eine dann Grafen von Werte, die von der Definition in Bereiche fallen Bruchwerte
  • 3. Spalte - bei der ersten Spalte der Versuchswert b hat dann Grafen von Werte, die durch Bruch Werte
  • bis 7. Spalte 4. definiert in Bereiche fallen - ähnlichen Logik wie die früheren 2 Spalten

Meine Daten

a=c("a","a","b","a","b","b","c","a") 

b=c(1,3,4,3,5,7,8,9) 

trial=data.frame(a,b) 

histz=hist(trial$b, breaks=c(0,4,6,100),plot=FALSE) 

histz 

Antwort

1

Sie cut() können b zu kategorisieren, dann table() die Verteilung in jedem Bereich zu erhalten. In Ihrem Beispiel

tab = table(cut(trial$b,breaks=c(0,4,6,100)),trial$a) 

Produziert

  a b c 
    (0,4] 3 1 0 
    (4,6] 0 1 0 
    (6,100] 1 1 1 

Wenn Sie Anteile möchten Sie

ptab = prop.table(tab,margin=2) 

und für die Formatierung von 2 Ziffern

rtab = round(ptab,2) 

was

verwenden können
   a b c 
    (0,4] 0.75 0.33 0.00 
    (4,6] 0.00 0.33 0.00 
    (6,100] 0.25 0.33 1.00 

Schließlich, wenn Sie Prozent tun konvertieren möchten, verwenden Sie die formattable Bibliothek

library(formattable) 
prtab = apply(rtab,1:2,percent,digits=0) 

      a  b  c  
    (0,4] "75%" "33%" "0%" 
    (4,6] "0%" "33%" "0%" 
    (6,100] "25%" "33%" "100%" 

Sie die Präzision, mit der digits Argument steuern kann.

+0

Gibt es eine Möglichkeit,% der Werte auf die zweite Dezimalstelle anstatt auf die Zahl zu runden? Ich möchte Prozentsatz gegen Spaltensumme ... so für 'eine' Spalte, die ich will (75%, 0%, 25%) – user2543622

+0

Hinzugefügt, wie Prozentsätze in Antwort erhalten. – Freguglia

Verwandte Themen