Je suis très nouveau chez R, alors je m'excuse pour une question aussi fondamentale. J'ai passé une heure à googler ce problème, mais je n'ai pas trouvé de solution.
Supposons que j'ai dans mon ensemble de données des données catégoriques sur des types d'animaux familiers courants. Je l’ai entré sous forme de vecteur de caractère dans R qui contient les noms de différents types d’animaux. Je l'ai créé comme ça:
animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")
Je le transforme en facteur à utiliser avec d'autres vecteurs dans mon cadre de données:
animalFactor <- as.factor(animals)
Je souhaite maintenant créer un histogramme indiquant la fréquence de chaque variable sur l'axe des ordonnées, le nom de chaque facteur sur l'axe des x et contenant une barre pour chaque facteur. Je tente ce code:
hist(table(animalFactor), freq=TRUE, xlab = levels(animalFactor), ylab = "Frequencies")
La sortie n'est absolument pas comme je m'y attendais. Mis à part les problèmes d’étiquetage, je n'arrive pas à comprendre comment créer un histogramme de fréquence simple par catégorie.
Il semble que vous souhaitiez barplot(prop.table(table(animals)))
:
Cependant, ce n'est pas un histogramme.
Si vous souhaitez effectuer cela dans ggplot
, une modification de l'API a été apportée à geom_histogram()
qui entraîne une erreur: https://github.com/hadley/ggplot2/issues/1465
Pour résoudre ce problème, utilisez geom_bar()
:
animals <- c("cat", "dog", "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")
library(ggplot2)
# counts
ggplot(data.frame(animals), aes(x=animals)) +
geom_bar()
La raison pour laquelle vous obtenez un résultat inattendu est que hist(...)
calcule la distribution à partir d'un vecteur numérique. Dans votre code, table(animalFactor)
se comporte comme un vecteur numérique comportant trois éléments: 1, 3, 7. Donc, hist(...)
trace le nombre de 1 (1), le nombre de 3 (1) et le nombre de 7 (1). La solution de @ Roland est la plus simple.
Voici un moyen de faire cela en utilisant ggplot
:
library(ggplot2)
ggp <- ggplot(data.frame(animals),aes(x=animals))
# counts
ggp + geom_histogram(fill="lightgreen")
# proportion
ggp + geom_histogram(fill="lightblue",aes(y=..count../sum(..count..)))
Vous obtiendrez exactement le même résultat en utilisant animalFactor
au lieu de animals
dans le code ci-dessus.
Pays est une variable catégorique et je veux voir combien d'occurrences de pays existent dans le jeu de données. En d’autres termes, combien d’enregistrements/participants proviennent de chaque pays
barplot(summary(df$Country))
Les données en tant que facteur peuvent être utilisées en entrée de la fonction de tracé.
Une réponse à une question similaire a été donnée ici: https://stat.ethz.ch/pipermail/r-help/2010-December/261873.html
x=sample(c("Richard", "Minnie", "Albert", "Helen", "Joe", "Kingston"),
50, replace=T)
x=as.factor(x)
plot(x)