Comment trouver des statistiques récapitulatives pour toutes les combinaisons uniques de facteurs dans un data.frame dans R? [fermé]

11

Je veux calculer un résumé d'une variable dans un data.frame pour chaque combinaison unique de facteurs dans le data.frame. Dois-je utiliser plyr pour ce faire? Je suis d'accord avec l'utilisation de boucles au lieu d'appliquer (); il suffirait donc de découvrir chaque combinaison unique.

russellpierce
la source
1
La question est trompeuse lorsque vous posez des questions sur des combinaisons uniques de facteurs, puis dans les détails, vous posez des questions sur le résumé par combinaisons uniques.
Wojtek

Réponses:

7

Bien que je pense que aggregatec'est probablement la solution que vous cherchez, si vous voulez créer une liste explicite de toutes les combinaisons de facteurs possibles, expand.gridcela fera pour vous. par exemple

> 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

Vous pouvez ensuite parcourir chaque ligne du bloc de données résultant pour extraire les enregistrements de vos données d'origine.

Mark M. Fredrickson
la source
11

Voir aggregateet by. Par exemple, à partir du fichier d'aide pour 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
la source
1
réponse correcte la plus rapide
John
3

Voici la solution plyr, qui a l'avantage de renvoyer plusieurs statistiques récapitulatives et de produire une barre de progression pour les longs calculs:

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
la source
ProFjet),m=meunen(X
1

En plus d'autres suggestions, vous pouvez trouver la describe.by()fonction dans le psychpackage utile. Il peut être utilisé pour afficher des statistiques récapitulatives sur les variables numériques à travers les niveaux d'une variable de facteur.

Jeromy Anglim
la source
1

Personnellement, j'aime cast()le package de remodelage en raison de sa simplicité:

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

Il library(doBy)y a aussi la summaryBy()fonction, par exemple

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