Iniziamo creando un set di dati falso.
software = sample(c("Windows","Linux","Mac"), n=100, replace=T)
salary = runif(n=100,min=1,max=100)
test = data.frame(software, salary)
Questo dovrebbe creare un frame di dati test
che assomiglierà in qualche modo a:
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
MODIFICA in base al commento Si noti che se i dati non esistono già nel formato sopra, possono essere modificati in questo formato. Prendiamo un frame di dati fornito nella domanda originale e supponiamo che venga chiamato il frame di dati 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
Ora, usando la melt
funzione / metodo dal reshape
pacchetto in R
, per prima cosa creare il dataframe test
(che sarà usato per la stampa finale) come segue:
# 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"
Ora otterrai un frame di dati test
che assomiglia a:
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
Dopo aver creato il set di dati. Genereremo ora la trama.
Innanzitutto, crea il grafico a barre sulla sinistra in base ai conteggi del software che rappresenta il tasso di utilizzo.
p1 <- ggplot(test, aes(factor(software))) + geom_bar() + coord_flip()
Quindi, crea il boxplot sulla destra.
p2 <- ggplot(test, aes(factor(software), salary)) + geom_boxplot() + coord_flip()
Infine, posiziona entrambi questi grafici uno accanto all'altro.
require('gridExtra')
grid.arrange(p1,p2,nrow=1)
Questo dovrebbe creare una trama come: