2011-10-28 10 views
5

In R Voglio creare un grafico a scatole per contare i dati anziché i dati grezzi. Quindi lo schema della tabella è simile a

Valore | Conta
1 | 2
2 | 1

...
Boxplot di dati pre-aggregati/raggruppati in R

Invece di

Valore
...

Dove nel secondo caso si potrebbe semplicemente fare boxplot (x)

+0

Quindi, che tipo di grafico ti aspetti. Sono solo due valori di conteggio e il boxplot sarà piuttosto strano. Stai forse pensando a un barchart? –

+0

Questo è solo un esempio di dati, il mio set di dati reale ha molte più righe –

risposta

0

Sono sicuro che c'è un modo per fare ciò che vuoi con il già summit Dati arized, ma se non è possibile abusare del fatto che rep prende vettori:

> dat <- data.frame(Value = 1:5, Count = sample.int(5)) 
> dat 
    Value Count 
1  1  1 
2  2  3 
3  3  4 
4  4  2 
5  5  5 
> rep(dat$Value, dat$Count) 
[1] 1 2 2 2 3 3 3 3 4 4 5 5 5 5 5 

Basta avvolgere grafico a scatole in giro che e si dovrebbe ottenere quello che vuoi. Sono sicuro che c'è un modo più efficiente/migliore per farlo, ma questo dovrebbe funzionare per voi.

+0

Che funziona, ma è molto doloroso nel mio caso perché volevo fare boxplot di più categorie (oltre a Valore, Conteggio) nella mia trama. Ma c'est la vie. Grazie per il suggerimento! –

+0

@ John - nessun problema. Il mio altro suggerimento sarebbe quello di guardare a ggplot2. So che puoi passare lì i dati pre-riassunti. Spiacente, non uso grafica di base che spesso: http://had.co.nz/ggplot2/geom_boxplot.html – Chase

0

ho risolto un problema simile di recente tramite la funzione di 'applicare' su ogni colonna di conteggi con la funzione 'rep':

> datablock <- apply(countblock[-1], 2, function(x){rep(countblock$value, x)}) 
> boxplot(datablock) 

... È possibile che questo presuppone che i valori sono nella prima colonna e le colonne successive contengono dati di conteggio.

0

Una combinazione di rep e data.frame può essere utilizzato come un approccio se è necessaria un'altra variabile di classificazione

Es.

with(data.frame(v1=rep(data$v1,data$count),v2=(data$v2,data$count)), 
    boxplot(v1 ~ v2) 
)