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.


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.


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)

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

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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.