J'essaie d'obtenir plusieurs statistiques récapitulatives dans R/S-PLUS groupées par colonne catégorique en une seule fois. J'ai trouvé quelques fonctions, mais toutes font une statistique par appel, comme `aggreg ().
data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66,
71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59)
grp <- factor(rep(LETTERS[1:4], c(4,6,6,8)))
df <- data.frame(group=grp, dt=data)
mg <- aggregate(df$dt, by=df$group, FUN=mean)
mg <- aggregate(df$dt, by=df$group, FUN=sum)
Ce que je recherche, c’est d’obtenir plusieurs statistiques pour le même groupe, comme moyenne, min, max, standard, etc., en un seul appel, est-ce faisable?
Je vais mettre dans mes deux cents pour tapply()
.
tapply(df$dt, df$group, summary)
Vous pouvez écrire une fonction personnalisée avec les statistiques spécifiques que vous souhaitez remplacer par résumé.
dplyr le paquet pourrait être une bonne alternative à ce problème:
library(dplyr)
df %>%
group_by(group) %>%
summarize(mean = mean(dt),
sum = sum(dt))
Pour obtenir le 1er quadrant et le 3ème quadrant
df %>%
group_by(group) %>%
summarize(q1 = quantile(dt, 0.25),
q3 = quantile(dt, 0.75))
Utiliser le paquet purrr de Hadley Wickham est très simple. Utilisez split
pour scinder le data_frame
Passé en groupes, puis utilisez map
pour appliquer la fonction summary
à chaque groupe.
library(purrr)
df %>% split(.$group) %>% map(summary)
Il y a beaucoup de façons différentes de s'y prendre, mais je suis partial envers describeBy
dans le package psych
:
describeBy(df$dt, df$group, mat = TRUE)
jetez un coup d'œil au paquetage plyr
. Plus précisément, ddply
ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt))
après 5 longues années, je suis sûr que cette réponse ne suscitera guère d’attention, mais il reste à compléter toutes les options, voici celle avec data.table
library(data.table)
setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)]
# group mean_gr sum_gr
#1: A 61 244
#2: B 66 396
#3: C 68 408
#4: D 61 488
Outre describeBy
, le package doBy
est une autre option. Il fournit une grande partie des fonctionnalités de SAS SOMMAIRE DU PROCESS. Détails: http://www.statmethods.net/stats/descriptives.html
Certaines des autres approches fonctionnent, mais c’est assez proche de ce que vous faisiez et n’utilisez que la base r. Si vous connaissez la commande d'agrégat, cela peut être plus intuitif.
with( df , aggregate( dt , by=list(group) , FUN=summary) )
Tout d'abord, cela dépend de votre version de R. Si vous avez passé la version 2.11, vous pouvez utiliser aggreggate avec plusieurs fonctions de résultat (résumé, par instance ou votre propre fonction). Sinon, vous pouvez utiliser la réponse de Justin.