A l'aide du tableau() pour créer 3 à fréquence variable tableau dans la R
Je suis nouveau sur R et la recherche de l'aide. Je comprends le problème suivant est assez simple et recherché des questions similaires. Aucun de nous donner la réponse, je suis à la recherche pour - toute aide serait appréciée.
Le problème:
La production d'un tableau de fréquences à l'aide de la table()
fonction de trois variables avec les données dans le format:
Var1 Var2 Var3
1 0 1 0
2 0 1 0
3 1 1 1
4 0 0 1
Où, 0 = Non et 1 = "Oui"
Et la table finale est dans le format suivant avec des variables et des valeurs étiquetées:
Var3
Yes No
Var1 Yes 1 0
No 1 2
Var2 Yes 1 2
No 1 0
Ce que j'ai essayé jusqu'à présent:
En utilisant le code suivant, je suis capable de produire un 2 table variable, avec des étiquettes pour les variables, mais pas pour les valeurs (c'est à dire. Oui et non).
table(data$Var1, data$Var3, dnn = c("Var1", "Var3"))
Il ressemble à ceci:
Var3
Var1 0 1
0 2 1
1 0 1
En essayant de l'étiquette de la ligne et de la colonne des valeurs (0 = Non et 1= Oui) je comprends row.names
et responseName
peut être utilisé, cependant, la tentative suivante d'une ligne d'étiquettes noms donne un all arguments must have the same length
erreur.
> table(data$Var1, data$Var2, dnn = c("Var1", "Var2"), row.names = c("No", "Yes"))
J'ai aussi essayé d'utiliser ftable()
cependant la forme de la table produites à l'aide du code ci-dessous n'est pas correct de mauvaises fréquences pour le problème. Le problème avec les étiquettes de ligne & col valeurs persiste.
> ftable(data$Var1, data$Var2, data$Var3, dnn = c("Var1", "Var2", "Var3"))
Var3 0 1
Var1 Var2
0 0 0 1
1 2 0
1 0 0 0
1 0 1
Toute aide pour l'utilisation de table()
à produire un tableau de la forme désirée serait grandement apprécié.
- Convertir vos données en facteurs premiers de prendre soin de la question de l'étiquetage:
dat <- data.frame(lapply(dat, factor, levels=1:0, labels=c("Yes","No")))
- Merci, c'est très utile et est parfait pour résoudre le problème d'étiquetage.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de
tabular
delibrary(tables)
après la modification des étiquettes, comme montré par @thelatemailde données
La manière la plus simple est probablement d'utiliser le
reshape2
paquet. Tout d'abord, vous aurez besoin de convertir vos données numériques à des facteurs, afin de ne pas le traiter comme un numéro.Alors vous pouvez facilement appliquer juste
table(data)
pour obtenir les informations que vous souhaitez. Si vous voulez vraiment transformer dans le format indiqué, puis tirer comme undata.frame
et puis le transformer selon les besoins:Ce que la sortie:
MODIFIER: Vous pouvez simplement utiliser
ftable
sur le bloc de données, une fois tous les facteurs:ftable
pour obtenir le même résultat (voir mon edit). Si vous êtes intéressé parreshape2
, juste essayer deinstall.packages("reshape2")
dans la console et il va installer automatiquement pour vousftable
solution n'est pas tout à fait le même - la réponse donne un nombre deVar1 x Var2 x Var3
pasVar1 x Var3
rejoint avecVar2 x Var3
factor
, je ne suis pas sûr si c'est nécessaire, sauf si vous modifiez les étiquettes comme thelatemail mentionné dans les commentaires. Je reçois le mêmedcast
de sortie sans avoir à les convertir explicitement facteurstr(as.data.frame(table(data)))
obtiendrez les colonnes var1:var3 comme des facteurs