2011-11-30 2 views
2

Je sais qu'il y a un moyen de le faire facilement en utilisant un paquet ... J'ai trouvé le paquet il y a quelques mois et l'ai fait ensuite. Cependant, je n'ai pas noté le lien à l'époque, et maintenant je ne trouve plus la solution pour la vie de moi!Comment créer une table imbriquée dans R?

Ma question est: comment créer une table imbriquée dans R? Par exemple, j'ai un tableau de données des individus. Chaque rangée est une personne différente. Chaque colonne contient une variable telle que l'âge, le sexe, la taille, etc.

Je sais qu'en utilisant la commande table, je peux faire quelque chose comme ceci: table (data $ gender, data $ ageCategory).

Cela ferait une table 2 x 2 avec les comptes à l'intérieur.

Cependant, je voudrais faire une table imbriquée, analogue à celui qui est ici (ignorer la dernière colonne avec les totaux): http://psycnet.apa.org/journals/ror/32/2/images/ror_32_2_199_tbl1a.gif

Ie, je voudrais faire une table avec le genre comme les colonnes, puis avec les lignes comme catégorie d'âge, et dans chaque rangée, des rangées supplémentaires avec la catégorie de hauteur.

J'ai trouvé un paquet qui l'a fait facilement et maintenant je ne le retrouve plus!

Merci à tous ceux qui peuvent vous aider. C'est une question un peu idiote mais je pensais que je pourrais avoir plus de chance ici. Peut-être que "table imbriquée" n'est pas vraiment le nom approprié pour cela.

+0

Je pense que vous recherchez des noms de colonnes et de lignes. Essayez de chercher cela, car une table imbriquée serait une table séparée dans une cellule de la table (je pense), donc probablement ne vous donnerait pas ce que vous cherchez. Oh ... je n'ai pas lu le reste. Vous recherchez probablement des cellules fusionnées. Désolé pour ça. – craniumonempty

+0

Quelle est votre définition de "table imbriquée"? Une ligne ne peut pas contenir de ligne. Soit vous voulez un tableau multidimensionnel ou peut-être une variable 'list', par ex. 'myfile' avec les éléments' $ age, $ gender, $ height' et chaque élément de ce type pourrait avoir des sous-éléments, par ex. 'age $ foo, âge $ bar'. –

+0

Voulez-vous produire une table imbriquée en sortie, par exemple. LaTex, ou voulez-vous utiliser une table imbriquée comme un moyen de stocker des données (ce qui peut être fait facilement en utilisant des noms de données ordinaires). –

Répondre

3

Un ensemble de données exemple (ce qui est toujours une bonne idée d'utiliser dans votre question):

dat = data.frame(value = runif(100), 
       age = round(runif(100, min = 9, max = 11)) , 
       gender = sample(c("Male", "Female"), 100, replace = TRUE), 
       school = sample(c("Public", "Private"), 100, replace = TRUE)) 

Et maintenant pour produire quelque chose d'utile le long des lignes de la table par exemple vous avez affiché:

library(plyr) 
tab = count(dat, c("age", "gender", "school")) 
# The contents of tab: 
# age gender school freq 
# 1 9 Female Private 6 
# 2 9 Female Public 6 
# 3 9 Male Private 7 
# 4 9 Male Public 8 
# 5 10 Female Private 11 
# 6 10 Female Public 13 
# 7 10 Male Private 10 
# 8 10 Male Public 14 
# 9 11 Female Private 3 
# 10 11 Female Public 11 
# 11 11 Male Private 3 
# 12 11 Male Public 8 

Et pour produire une table pour le latex, jetez un oeil au paquet xtable. Pour Word, il est probablement plus facile d'effectuer des opérations manuelles sur la sortie de count.

+0

Merci pour votre aide! J'ai aussi finalement trouvé le paquet auquel je pensais - ça s'appelle MASS. J'ai utilisé les données que vous avez fournies pour effectuer les opérations suivantes: bibliothèque (MASS); ftable (xtabs (formule = ~ école + sexe + âge, data = dat)) – Alexander

1

Vous pouvez transmettre plus de deux variables en table afin de répartir les comptes de l'ensemble de données de plusieurs manières. Ceci est une modification d'un exemple pour la page d'aide table.

counts <- with(airquality, table(
    OzCategory = cut(airquality$Ozone, seq(0, 180, 20)), 
    Month, 
    TempHi = Temp > 75 
)) 
print(counts, zero.print = ".") 
+0

Merci pour votre aide!Je n'étais pas au courant que c'était possible - sera certainement utile dans le futur! – Alexander

Questions connexes