Il semble que vous vouliez appliquer un certain nombre de calculs différents à certaines données, en les regroupant par un champ (dans l'exemple, par état)?
Il y a plusieurs façons de le faire. Voir this related question. Vous pouvez utiliser le package reshape
de Hadley Wickham (voir reshape homepage). Par exemple, si vous vouliez la moyenne, la somme et les fonctions de comptage appliquées à certaines données groupées par une valeur (ce qui n'a pas de sens, mais il utilise les données de airquality de Reshape):
> library(reshape)
> names(airquality) <- tolower(names(airquality))
> # melt the data to just include month and temp
> aqm <- melt(airquality, id="month", measure="temp", na.rm=TRUE)
> # cast by month with the various relevant functions
> cast(aqm, month ~ ., function(x) c(mean(x),sum(x),length(x)))
month X1 X2 X3
1 5 66 2032 31
2 6 79 2373 30
3 7 84 2601 31
4 8 84 2603 31
5 9 77 2307 30
Ou vous pouvez utiliser le by()
fonction. Où l'index représentera les états. Dans votre cas, plutôt que d'appliquer une fonction (par exemple, la moyenne), vous pouvez appliquer votre propre fonction qui effectuera plusieurs tâches (en fonction de vos besoins): par exemple, function(x) { c(mean(x), length(x)) }
. Ensuite, exécutez do.call("rbind"
(par exemple) sur la sortie. En outre, vous pouvez envisager d'utiliser un package de génération de rapports tel que Sweave (avec xtable) ou Jeffrey Horner's brew package. Il y a une great post on the learnr blog about creating repetitive reports qui montre comment l'utiliser.
À seulement remarque rapide - 'each' prend en charge les noms de colonnes ainsi:' jeter (AQM, mois ~, chacun (moyenne, somme, longueur) 'Et.. , le plus simple est d'utiliser 'c':' cast (aqm, mois ~., c (moyen, somme, longueur) ' – learnr