Wie finde ich zusammenfassende Statistiken für alle eindeutigen Kombinationen von Faktoren in einem data.frame in R? [geschlossen]

11

Ich möchte eine Zusammenfassung einer Variablen in einem data.frame für jede eindeutige Kombination von Faktoren im data.frame berechnen. Soll ich dazu plyr verwenden? Ich bin in Ordnung mit der Verwendung von Schleifen im Gegensatz zu apply (); Es würde also ausreichen, nur jede einzelne Kombination herauszufinden.

russellpierce
quelle
1
Die Frage ist irreführend, wenn Sie nach eindeutigen Kombinationen von Faktoren fragen und dann im Detail nach einer Zusammenfassung nach eindeutigen Kombinationen fragen.
Wojtek

Antworten:

7

Ich denke, dies aggregateist wahrscheinlich die Lösung, die Sie suchen. Wenn Sie jedoch eine explizite Liste aller möglichen Faktorenkombinationen erstellen möchten, expand.gridwird dies für Sie erledigt. z.B

> expand.grid(height = seq(60, 80, 5), weight = seq(100, 300, 50),
             sex = c("Male","Female"))
       height weight    sex
1      60    100   Male
2      65    100   Male
... 
30     80    100 Female
31     60    150 Female

Sie können dann jede Zeile im resultierenden Datenrahmen durchlaufen, um Datensätze aus Ihren Originaldaten abzurufen.

Mark M. Fredrickson
quelle
11

Siehe aggregateund by. Zum Beispiel aus der Hilfedatei für aggregate:

## Compute the averages according to region and the occurrence of more
## than 130 days of frost.
aggregate(state.x77,
      list(Region = state.region,
           Cold = state.x77[,"Frost"] > 130),
      mean)
Aniko
quelle
1
schnellste laufende richtige Antwort
John
3

Hier ist die Plyr-Lösung, die den Vorteil hat, dass mehrere Zusammenfassungsstatistiken zurückgegeben und ein Fortschrittsbalken für lange Berechnungen erstellt werden:

library(ez) #for a data set
data(ANT)
cell_stats = ddply(
    .data = ANT #use the ANT data
    , .variables = .(cue,flanker) #uses each combination of cue and flanker
    , .fun = function(x){ #apply this function to each combin. of cue & flanker
        to_return = data.frame(
            , acc = mean(x$acc)
            , mrt = mean(x$rt[x$acc==1])
        )
        return(to_return)
    }
    , .progress = 'text'
)
Mike Lawrence
quelle
Profit),m=mean(x
1

Neben anderen Vorschlägen kann die describe.by()Funktion im psychPaket hilfreich sein. Es kann verwendet werden, um zusammenfassende Statistiken zu numerischen Variablen über Ebenen einer Faktorvariablen hinweg anzuzeigen.

Jeromy Anglim
quelle
1

Ich persönlich mag cast()das Umformungspaket wegen seiner Einfachheit:

library(reshape)
cast(melt(tips), sex ~ smoker | variable, c(sd,mean, length))
Brandon Bertelsen
quelle
1

Darin library(doBy)liegt auch die summaryBy()Funktion, z

summaryBy(DV1 + DV2 ~ Height+Weight+Sex,data=my.data)
russellpierce
quelle