2017-05-13 3 views
-1

Haben Sie einen DatenrahmenFrequenzzählung mit mehreren Bedingungen R

Date   Team   Opponent Weather Outcome 
2017-05-01 All Stars  B Stars  Rainy  1 
2017-05-02 All Stars  V Stars  Rainy  1 
2017-05-03 All Stars  M Trade  Sunny  0 
. 
. 
2017-05-11 All Stars  Vdronee  Sunny  0 

Wo Ergebnis 1 einen Gewinn anzeigt. Ich habe die Tabellenfunktion verwendet, um die Frequenz und den angewandten Zustand zu erhalten.

table(df$Outcome, df$Team == "All Stars") 

Gibt mir dieses

FALSE TRUE 
    0 1005 30 
    1 1323 57 

So Häufigkeit der Sieg ist 57/87 = 0,655

Zwei Fragen:

vielmehr die den Gewinn Frequenz Berechnung manuell, wie kann ich bette das direkt in eine Formel ein?

und

Wie kann ich auf die x jüngsten Beobachtungen Filter? also so etwas wie

table(df$Outcome, df$Team == "All Stars" & df$date = filtering for the 5 most recent observations) 

dank

+0

Ist Ihr Spalte "Datum" immer chronologisch sortiert? Wie es aussieht. – Kanak

+0

für Proportionstabelle, können Sie 'prop.table()' –

+0

verwenden @ kanak ist chronologisch in einer Desc-Reihenfolge pro Team sortiert. Eg 2017.01.01 All Stars 2017.01.02 All Stars 2017.01.01 Andere Teams 2017.01.02 Andere Teams – Adni

Antwort

0

Eine Option ist data.table

libray(data.table) 
dt <- data.table(df) 
dt[, .(prop=sum(outcome)/.N),Team] 

zu verwenden, um die 5 neuesten Beobachtungen erhalten Sie die folgenden Möglichkeiten:

dt[,head(.SD,5),by=.(Team,Date)][,.(prop=sum(outcoume/.N),Team] 
+0

Danke für den Kommentar. Wo wird der Filter in der obigen Formel angewendet? Ich habe mehr Teams als "All Stars" in meinem Datenrahmen. Die obigen Vorschläge filtern nicht nach einem bestimmten Teamrecht? – Adni

+0

Es gruppiert nach Team. – DJJ

+0

Ist es möglich, für ein bestimmtes Team wie in diesem Beispiel zu filtern: Tabelle (df $ Ergebnis, df $ Team == "Alle Sterne") – Adni