Come trovare statistiche riassuntive per tutte le combinazioni uniche di fattori in un data.frame in R? [chiuso]


11

Voglio calcolare un riepilogo di una variabile in un data.frame per ogni combinazione unica di fattori nel data.frame. Dovrei usare plyr per fare questo? Sono d'accordo con l'utilizzo di loop invece di apply (); quindi basta scoprire ogni combinazione unica sarebbe sufficiente.


1
La domanda è fuorviante quando chiedi informazioni su combinazioni uniche di fattori e poi in dettaglio chiedi informazioni sul riassunto con combinazioni uniche.
Wojtek,

Risposte:


7

Mentre penso che aggregatesia probabilmente la soluzione che stai cercando, se vuoi creare un elenco esplicito di tutte le possibili combinazioni di fattori, expand.gridlo farà per te. per esempio

> 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

È quindi possibile eseguire il ciclo su ogni riga nel frame di dati risultante per estrarre i record dai dati originali.


11

Vedi aggregatee by. Ad esempio, dal file della guida per 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)

1
risposta corretta corsa più veloce
John

3

Ecco la soluzione plyr, che ha il vantaggio di restituire più statistiche di riepilogo e produrre una barra di avanzamento per lunghi calcoli:

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'
)

Profiot),m=meun'n(X

1

Oltre ad altri suggerimenti, potresti trovare utile la describe.by()funzione nel psychpacchetto. Può essere usato per mostrare statistiche riassuntive su variabili numeriche attraverso i livelli di una variabile fattore.


1

Personalmente mi piace cast(), dal pacchetto reshape per la sua semplicità:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.