visualizar un diagrama de caja horizontal en R

8

Tengo un conjunto de datos como este. Los datos se han recopilado a través de un cuestionario y voy a hacer un análisis exploratorio de datos.

windows <- c("yes", "no","yes","yes","no")
sql     <- c("no","yes","no","no","no")
excel  <- c("yes","yes","yes","no","yes")
salary <- c(100,200,300,400,500 )

test<- as.data.frame (cbind(windows,sql,excel,salary),stringsAsFactors=TRUE)
test[,"salary"] <- as.numeric(as.character(test[,"salary"] ))

Tengo una variable de resultado (salario) en mi conjunto de datos y un par de variables de entrada (herramientas). ¿Cómo puedo visualizar un diagrama de caja horizontal como este: ingrese la descripción de la imagen aquí

Hamideh
fuente

Respuestas:

3

Comencemos creando un conjunto de datos falso.

software = sample(c("Windows","Linux","Mac"), n=100, replace=T) 
salary = runif(n=100,min=1,max=100) 
test = data.frame(software, salary)

Esto debería crear un marco de datos testque se verá algo así como:

    software    salary
1    Windows 96.697217
2      Linux 29.770905
3    Windows 94.249612
4        Mac 71.188701
5      Linux 94.028326
6      Linux  7.482632
7        Mac 98.841689
8        Mac 81.152623
9    Windows 54.073761
10   Windows  1.707829

EDITAR basado en el comentario Tenga en cuenta que si los datos aún no existen en el formato anterior, se pueden cambiar a este formato. Tomemos un marco de datos proporcionado en la pregunta original y supongamos que se llama al marco de datos raw_test.

    windows sql excel salary
1     yes  no   yes    100
2      no  yes  yes    200
3     yes  no   yes    300
4     yes  no    no    400
5      no  no   yes    500

Ahora, usando la meltfunción / método del reshapepaquete R, primero cree el marco de datos test(que se usará para el trazado final) de la siguiente manera:

# use melt to convert from wide to long format 
test = melt(raw_test,id.vars=c("salary"))
# subset to only select where value is "yes"
test = subset(test, value == 'yes')
# replace column name from "variable" to "software" 
names(test)[2] = "software"   

Ahora, obtendrá un marco de datos testque se ve así:

  salary software value
1     100  windows   yes
3     300  windows   yes
4     400  windows   yes
7     200      sql   yes
11    100    excel   yes
12    200    excel   yes
13    300    excel   yes
15    500    excel   yes

Habiendo creado el conjunto de datos. Ahora generaremos la trama.

Primero, cree el diagrama de barras a la izquierda basado en los recuentos de software que representa la tasa de uso.

p1 <- ggplot(test, aes(factor(software))) + geom_bar() + coord_flip()

A continuación, cree el diagrama de caja a la derecha.

p2 <- ggplot(test, aes(factor(software), salary)) + geom_boxplot() + coord_flip()

Finalmente, coloque ambas parcelas una al lado de la otra.

require('gridExtra')
grid.arrange(p1,p2,nrow=1)

Esto debería crear una trama como:

En el panel izquierdo se muestran los recuentos de cómo se utiliza el software diferente representado a través de gráficos de barras y en el panel derecho muestra la distribución de los salarios agrupados por software utilizado representado a través de los gráficos de caja.

Nitesh
fuente
2

Deberá crear una columna que contenga información de software; por ejemplo, denomínelo software y la columna de salario tiene el salario correspondiente, por lo que algo así como

 Software   Salary
 Microsoft  100
 Microsoft  300
 Microsoft  400
 SQL        200

y así sucesivamente ... entonces puedes trazar con el siguiente código

p <- ggplot(test, aes(factor(software), salary))
p + geom_boxplot() + coord_flip()
Lauren Goodwin
fuente
Bien, pero ¿cómo puedo hacer una columna de software?
Hamideh
Eso es algo que tendrá que investigar usted mismo. No estoy seguro de cómo se ve su conjunto de datos: la función de fusión puede serle útil.
Lauren Goodwin
@LaurenGoodwin Mi respuesta a esta pregunta utiliza gridExtra para trazar un diagrama de barras y un diagrama de caja uno al lado del otro para producir la visualización solicitada.
Nitesh