Domanda

Ho un fattore con molti valori diversi. Se si esegue summary(factor) l'output è un elenco dei diversi valori e la loro frequenza. In questo modo:

A B C D
3 3 1 5

Vorrei fare un istogramma dei valori di frequenza, cioè asse X contiene le diverse frequenze che si verificano, asse y il numero di fattori che hanno questa particolare frequenza. Qual è il modo migliore per realizzare una cosa del genere?

modifica: grazie alla risposta qui sotto ho capito che quello che posso fare è ottenere il fattore delle frequenze fuori dal tavolo, ottenere che in una tabella e poi grafico che pure, che sarà simile (se f è il fattore):

plot(factor(table(f)))
È stato utile?

Soluzione

Aggiornamento alla luce della chiarito Q

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

dà:

istogramma della frequenza di casi di fattore

Qui vale solo hist() direttamente al risultato di table(dat). table(dat) fornisce le frequenze per livelli del fattore e hist() produce l'istogramma di questi dati.


Original

Ci sono diverse possibilità. I suoi dati:

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

Qui ci sono tre, da una colonna, dall'alto verso il basso:

  • I metodi di stampa di default per la classe "table", traccia i dati ei bar istogramma-come
  • Una barra di trama - che è probabilmente quello che si intende con istogramma. Si noti il ??basso rapporto ink-to-informazioni qui
  • un puntino trama o dot grafico; mostra le stesse informazioni come le altre trame, ma utilizza molto meno inchiostro per informazioni unità. Preferita.

Codice per produrli:

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)

questo produce:

viene tracciato dimensionali

Se v'è solo i dati in factor variabili (brutto nome a scelta tra l'altro), allora table(factor) può essere utilizzato piuttosto che table(dat) o table(dat$fac) nei miei esempi di codice.

Per completezza, pacchetto lattice è più flessibile quando si tratta di produrre la trama punto come possiamo ottenere l'orientamento desiderato:

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

dando:

Lattice un grafico a punti versione

E una versione ggplot2:

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

dando:

versione ggplot2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top