行が観察と列の質問である調査ファイルがあります。
以下にいくつかの 偽データ を示します:
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
私の目的は、ggplot2
でこの種のプロットを作成することです。
ここに私の偽のデータがあります:
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)
しかし、カウントとしてYを選択すると、Xとグループの値の選択に関する問題に直面しています... reshape2
を使用せずに成功できるかどうかわかりません...メルト機能付きの形状変更を使用します。しかし、私はそれを使用する方法を理解していません...
最初に、各カテゴリのカウント、つまり各グループ(食品、音楽、人物)のバッドとグッズの数などを取得する必要があります。これは次のように行われます。
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
次に、データフレームを作成し、それを溶かしてプロットする必要があります。
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")
これはあなたが望んでいることですか?
少し明確にするために、 ggplot multiple grouping bar では、次のようなデータフレームがありました。
> 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
列4〜9に数値があり、後でy軸にプロットされるため、これはreshape
で簡単に変換してプロットできます。
現在のデータセットには、同様のものが必要だったため、freq=table(col(raw), as.matrix(raw))
を使用してこれを取得しました。
> 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
Very.Bad
、X1PCE
、X2PCE
の代わりにX3PCE
、Bad
、Good
などがあると想像してください。類似性を参照してください?しかし、最初にそのような構造をcreateする必要がありました。したがって、freq=table(col(raw), as.matrix(raw))
。