Ottenere una trama istogramma delle frequenze fattore (sintesi)
-
24-10-2019 - |
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)))
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à:
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:
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:
E una versione ggplot2
:
require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) +
geom_point()
p
dando: