2011-10-28 24 views
5

En R Quiero crear un diagrama de caja sobre datos de conteo en lugar de datos brutos. Entonces mi esquema de tabla se ve como

Valor | Cuenta
1 | 2
2 | 1

...
Diagrama de caja de datos preagregados/agrupados en R

En lugar de

Valor
...

Cuando en el segundo caso yo podría simplemente hacer diagrama de caja (x)

+0

Entonces, ¿qué tipo de gráfica son sus expectativas. Eso es solo dos valores de conteo y el diagrama de caja va a ser bastante extraño. ¿Estás pensando en un diagrama de barras? –

+0

Esto es solo datos de ejemplo, mi conjunto de datos real tiene muchas más filas –

Respuesta

0

Estoy seguro de que hay una manera de hacer lo que quieras con el ya summ arized de datos, pero si no, se puede abusar del hecho de que rep toma vectores:

> 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 

Simplemente envuelva alrededor de ese diagrama de caja y usted debe conseguir lo que quieres. Estoy seguro de que hay una forma más eficiente/mejor para hacer eso, pero esto debería funcionar para usted.

+0

Eso funciona, pero es muy doloroso en mi caso porque quería hacer diagramas de cajas de múltiples categorías (además de Valor, Cuenta) en mi diagrama. Pero c'est la vie. ¡Gracias por la sugerencia! –

+0

@John: sin preocupaciones. Mi otra sugerencia sería mirar ggplot2. Sé que puedes pasar datos pre-resumidos allí. Lo siento, no uso gráficos base que a menudo: http://had.co.nz/ggplot2/geom_boxplot.html – Chase

0

He resuelto un problema similar recientemente mediante el uso de la función de 'aplicar' en cada columna de recuentos con la función de 'representante':

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

... Lo anterior presupone que sus valores están en la primera columna y las columnas subsiguientes contienen datos de recuento.

0

Una combinación de rep y data.frame se puede utilizar como un enfoque si se necesita otra variable para la clasificación

Ej.

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

Cuestiones relacionadas