visualiser une boîte à moustaches horizontale dans R

8

J'ai un ensemble de données comme celui-ci. Les données ont été collectées via un questionnaire et je vais faire une analyse exploratoire des données.

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"] ))

J'ai une variable de résultat (salaire) dans mon ensemble de données et quelques variables d'entrée (outils). Comment puis-je visualiser une boîte à moustaches horizontale comme celle-ci: entrez la description de l'image ici

Hamideh
la source

Réponses:

3

Commençons par créer un faux ensemble de données.

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

Cela devrait créer une trame de données testqui ressemblera un peu à:

    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

EDIT basé sur un commentaire Notez que si les données n'existent pas déjà dans le format ci-dessus, elles peuvent être modifiées dans ce format. Prenons un bloc de données fourni dans la question d'origine et supposons que le bloc de données est appelé 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

Maintenant, en utilisant la meltfonction / méthode du reshapepackage dans R, créez d'abord le cadre de données test(qui sera utilisé pour le traçage final) comme suit:

# 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"   

Maintenant, vous obtiendrez un datframe testqui ressemble à:

  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

Après avoir créé l'ensemble de données. Nous allons maintenant générer l'intrigue.

Tout d'abord, créez le graphique à barres sur la gauche en fonction du nombre de logiciels représentant le taux d'utilisation.

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

Ensuite, créez le boxplot sur la droite.

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

Enfin, placez ces deux parcelles côte à côte.

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

Cela devrait créer un tracé comme:

Dans le volet de gauche, le nombre de modes d'utilisation des différents logiciels est représenté par des graphiques à barres et dans le volet de droite, la répartition des salaires regroupés par logiciel utilisé est représentée par des graphiques en boîte.

Nitesh
la source
2

Vous allez devoir créer une colonne contenant des informations sur le logiciel - par exemple, nommez-le logiciel et la colonne des salaires a le salaire correspondant, donc quelque chose comme

 Software   Salary
 Microsoft  100
 Microsoft  300
 Microsoft  400
 SQL        200

et ainsi de suite ... alors vous pouvez tracer avec le code ci-dessous

p <- ggplot(test, aes(factor(software), salary))
p + geom_boxplot() + coord_flip()
Lauren Goodwin
la source
Bon mais comment créer une colonne de logiciel?
Hamideh
C'est quelque chose que vous allez devoir rechercher vous-même. Je ne sais pas à quoi ressemble votre ensemble de données - la fonction de fusion peut vous être utile.
Lauren Goodwin
@LaurenGoodwin Ma réponse à cette question utilise gridExtra pour tracer un barplot et un boxplot côte à côte pour produire la visualisation demandée.
Nitesh