web-dev-qa-db-fra.com

Obtenez un histogramme des fréquences des facteurs (résumé)

J'ai un facteur avec de nombreuses valeurs différentes. Si vous exécutez summary(factor) la sortie est une liste des différentes valeurs et leur fréquence. Ainsi:

A B C D
3 3 1 5

Je voudrais faire un histogramme des valeurs de fréquence, c'est-à-dire que l'axe X contient les différentes fréquences qui se produisent, l'axe Y le nombre de facteurs qui ont cette fréquence particulière. Quelle est la meilleure façon d'accomplir quelque chose comme ça?

edit: grâce à la réponse ci-dessous, j'ai compris que ce que je pouvais faire était de retirer le facteur des fréquences du tableau, de le mettre dans un tableau puis de le représenter graphiquement, ce qui ressemblerait à (si f est le facteur):

plot(factor(table(f)))
17
wds

Mise à jour à la lumière de Q clarifié

set.seed(1)
dat2 <- data.frame(fac = factor(sample(LETTERS, 100, replace = TRUE)))
hist(table(dat2), xlab = "Frequency of Level Occurrence", main = "")

donne:

histogram of frequency of occurrence in factor

Ici, nous appliquons simplement hist() directement au résultat de table(dat). table(dat) fournit les fréquences par niveau du facteur et hist() produit l'histogramme de ces données.


Original

Il existe plusieurs possibilités. Vos données:

dat <- data.frame(fac = rep(LETTERS[1:4], times = c(3,3,1,5)))

En voici trois, de la première colonne, de haut en bas:

  • Les méthodes de tracé par défaut pour la classe "table", Tracent les données et les barres de type histogramme
  • Un graphique à barres - ce que vous entendez probablement par histogramme. Notez le faible rapport encre/information ici
  • Un diagramme à points ou un diagramme à points; affiche les mêmes informations que les autres tracés, mais utilise beaucoup moins d'encre par unité d'informations. Préféré.

Code pour les produire:

layout(matrix(1:4, ncol = 2))
plot(table(dat), main = "plot method for class \"table\"")
barplot(table(dat), main = "barplot")
tab <- as.numeric(table(dat))
names(tab) <- names(table(dat))
dotchart(tab, main = "dotchart or dotplot")
## or just this
## dotchart(table(dat))
## and ignore the warning
layout(1)

cela produit:

one dimensional plots

Si vous avez juste vos données dans la variable factor (choix de mauvais nom d'ailleurs) alors table(factor) peut être utilisé plutôt que table(dat) ou table(dat$fac) dans mes exemples de code.

Pour être complet, le package lattice est plus flexible quand il s'agit de produire le tracé de points car nous pouvons obtenir l'orientation souhaitée:

require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))

donnant:

Lattice dotplot version

Et une version ggplot2:

require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) + 
    geom_point()
p

donnant:

ggplot2 version