J'ai un fichier d'enquête dans lequel la ligne est l'observation et la question de la colonne.
Voici quelques fausses données elles ressemblent à:
People,Food,Music,People
P1,Very Bad,Bad,Good
P2,Good,Good,Very Bad
P3,Good,Bad,Good
P4,Good,Very Bad,Very Good
P5,Bad,Good,Very Good
P6,Bad,Good,Very Good
Mon but est de créer ce genre d’intrigue avec ggplot2
.
Voici mes fausses données:
raw <- read.csv("http://Pastebin.com/raw.php?i=L8cEKcxS",sep=",")
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
Mais si je choisis Y en tant que compte, alors je suis confronté à un problème concernant le choix de X et les valeurs du groupe ... Je ne sais pas si je peux réussir sans utiliser reshape2
... Je suis aussi fatigué d'utiliser reshape avec la fonction de fusion. Mais je ne comprends pas comment l'utiliser ...
Vous devez d’abord obtenir les chiffres de chaque catégorie, c’est-à-dire le nombre de torts et de biens et ainsi de suite pour chaque groupe (aliments, musique, personnes). Cela se ferait comme suit:
raw <- read.csv("http://Pastebin.com/raw.php?i=L8cEKcxS",sep=",")
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw=raw[,c(2,3,4)] # getting rid of the "people" variable as I see no use for it
freq=table(col(raw), as.matrix(raw)) # get the counts of each factor level
Ensuite, vous devez créer un bloc de données, le fondre et le tracer:
Names=c("Food","Music","People") # create list of names
data=data.frame(cbind(freq),Names) # combine them into a data frame
data=data[,c(5,3,1,2,4)] # sort columns
# melt the data frame for plotting
data.m <- melt(data, id.vars='Names')
# plot everything
ggplot(data.m, aes(Names, value)) +
geom_bar(aes(fill = variable), position = "dodge", stat="identity")
Est-ce ce que vous recherchez?
Pour clarifier un peu, dans barre de regroupement multiple de ggplot vous aviez un cadre de données qui ressemblait à ceci:
> head(df)
ID Type Annee X1PCE X2PCE X3PCE X4PCE X5PCE X6PCE
1 1 A 1980 450 338 154 36 13 9
2 2 A 2000 288 407 212 54 16 23
3 3 A 2020 196 434 246 68 19 36
4 4 B 1980 111 326 441 90 21 11
5 5 B 2000 63 298 443 133 42 21
6 6 B 2020 36 257 462 162 55 30
Comme vous avez des valeurs numériques dans les colonnes 4 à 9, qui seront ensuite tracées sur l’axe des y, cela peut être facilement transformé avec reshape
et tracé.
Pour notre ensemble de données actuel, nous avions besoin de quelque chose de similaire, nous avons donc utilisé freq=table(col(raw), as.matrix(raw))
pour obtenir ceci:
> data
Names Very.Bad Bad Good Very.Good
1 Food 7 6 5 2
2 Music 5 5 7 3
3 People 6 3 7 4
Imaginez que vous ayez Very.Bad
, Bad
, Good
et ainsi de suite au lieu de X1PCE
, X2PCE
, X3PCE
. Voir la similitude? Mais nous avions besoin de créer une telle structure en premier. D'où la freq=table(col(raw), as.matrix(raw))
.