Jak znaleźć statystyki podsumowujące dla wszystkich unikalnych kombinacji czynników w ramce data.frame w R? [Zamknięte]

11

Chcę obliczyć podsumowanie zmiennej w data.frame dla każdej unikalnej kombinacji czynników w data.frame. Czy powinienem użyć do tego plyr? Nie przeszkadza mi używanie pętli w przeciwieństwie do apply (); więc po prostu znalezienie każdej unikalnej kombinacji byłoby wystarczające.

russellpierce
źródło
1
Pytanie jest mylące, gdy pytasz o unikalne kombinacje czynników, a następnie szczegółowo pytasz o podsumowanie według unikalnych kombinacji.
Wojtek

Odpowiedzi:

7

Chociaż myślę, że aggregateprawdopodobnie jest to rozwiązanie, którego szukasz, jeśli chcesz stworzyć wyraźną listę wszystkich możliwych kombinacji czynników, expand.gridzrobi to za Ciebie. na przykład

> 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

Następnie można zapętlić każdy wiersz w wynikowej ramce danych, aby wyciągnąć rekordy z oryginalnych danych.

Mark M. Fredrickson
źródło
11

Zobacz aggregatei by. Na przykład z pliku pomocy dla 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
źródło
1
najszybciej działająca poprawna odpowiedź
Jan
3

Oto rozwiązanie plyr, które ma tę zaletę, że zwraca wiele statystyk podsumowujących i tworzy pasek postępu dla długich obliczeń:

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
źródło
P.rofajat),m=mmizan(x
1

Oprócz innych sugestii describe.by()funkcja może być psychprzydatna w pakiecie. Można go używać do wyświetlania statystyk podsumowujących dotyczących zmiennych numerycznych na różnych poziomach zmiennej czynnikowej.

Jeromy Anglim
źródło
1

Osobiście podoba mi się cast()z pakietu przekształcania ze względu na jego prostotę:

library(reshape)
cast(melt(tips), sex ~ smoker | variable, c(sd,mean, length))
Brandon Bertelsen
źródło
1

W library(doBy)istnieje również summaryBy()funkcja, np

summaryBy(DV1 + DV2 ~ Height+Weight+Sex,data=my.data)
russellpierce
źródło