2017-02-16 5 views
1

Ich habe einen Datenrahmen von Worthäufigkeiten, wie zum Beispiel:berechnen Proportionen gruppenweise von Datenrahmen

df <- data.frame(
    Predictor = c("for","of","as","for","for","as","of","of","as","for"), 
    ToPredict = c("sure","course","much","him","keeps","far","them","this","an","petes"), 
    Freq = c(53,32,21,17,13,5,3,2,2,1)) 

ich eine neue Spalte berechnet werden soll, dass der Anteil ist, dass jeder ToPredict der einzelnen Prädiktoren bildet.

So, in dem obigen Beispiel die Werte für diese neue Spalte würden:

df$Props = c(0.631,0.865,0.75,0.202,0.155,0.179,0.081,0.054,0.071,0.012) 

Im Moment habe ich einen Datenrahmen von Summen:

sums <- aggregate(df$Freq, by=list(Category=df$Predictor), FUN=sum) 

und ich habe versucht:

df$Props <- with(df, Freq/sums$x[which(sums$Category == Predictor)]) 

Offensichtlich funktioniert das nicht. Aber ich weiß nicht was. Jede Hilfe wird sehr geschätzt.

+1

ich einen schleichenden Verdacht habe ist dies eine doppelte Frage, aber 'mit (df, ave (Freq, Predictor, FUN = prop.table))' sollte TU es. – thelatemail

+0

Mögliche doppelte Kandidaten, obwohl die Antworten nicht groß sind - http://stackoverflow.com/questions/15009011/calculate-proportions-within-subsets-of-a-data-frame und http://stackoverflow.com/questions/26885819/proportionale Mengenberechnung für eine Teilmenge des Datensatzes – thelatemail

+0

Es ist durchaus möglich, dass dies der Fall ist. Allerdings konnte ich die Antwort nicht mit einigem Suchen finden. Deine Lösung funktioniert. Vielen Dank! – davo1979

Antwort

1
a=aggregate(df$Freq, by=list(df$Pred), FUN=sum) 
a1=a[,2] 
names(a1)=as.character(a[,1]) 
df$Props=df$Freq/a1[df$Pred] 
+0

Dieser funktioniert auch. Und ist für mich intuitiver (obwohl ich mir das langsamer vorstellen würde, da es einen zusätzlichen Vektor erzeugt). Trotzdem kann ich meine (thelatemail's) Antwort nicht akzeptieren (zumindest nicht sofort). Also das wird funktionieren. – davo1979

1

Per thelatemail:

with(df, ave(Freq, Predictor, FUN=prop.table)) 
Verwandte Themen