2009-09-23 8 views
3

Quelqu'un a-t-il de bonnes idées sur la façon de coder des tabulations complexes dans R? Je crains d'être un peu vague sur ce point, mais je veux mettre en place un script pour créer un tas de tables d'une complexité analogue à l'état abstrait des États-Unis.De bons moyens de coder des tabulations complexes dans R?

.: http://www.census.gov/compendia/statab/tables/09s0015.pdf par exemple

Et je voudrais éviter tout un tas de déclarations rbind et hbind.

En SAS, j'ai entendu, il existe un langage de spécification de création de table; Je me demandais s'il y avait quelque chose de puissance similaire pour R?

Merci!

Répondre

3

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.

+0

À 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

1

Une autre option est le paquet plyr.

library(plyr) 
names(airquality) <- tolower(names(airquality)) 
ddply(airquality, "month", function(x){ 
    with(x, c(meantemp = mean(temp), maxtemp = max(temp), nonsense = max(temp) - min(solar.r))) 
}) 
0

Here is an interesting blog posting on this topic. L'auteur tente de créer un rapport analogue à World Population Prospects des Nations unies: Le rapport 2008 de révision.

Espoir qui aide, Charlie

+0

Charlie: N'est-ce pas le même lien au bas de ma réponse? – Shane

+0

Salut Shane, Vous J'ai raison, je suis désolé, je n'ai pas remarqué votre lien. – Charlie

Questions connexes