1

次の例のデータがあるとします。

df<-data.frame(cbind(cntry<- c("BE","ES","IN","GE","BE","ES","GE",NA,"IN","IN"),
gndr<- c(NA,1,2,2,2,2,1,1,1,2),
plcvcrcR<-c(0,1,NA,0,0,1,1,1,0,0),
plcpvcrR<-c(0,1,1,1,NA,0,0,0,0,0),
plccbrgR<- c(0,1,0,NA,0,1,0,1,1,0),
plcarcrR<-c(1,0,0,NA,1,0,1,0,0,0),
plcrspcR<-c(1,1,0,0,0,0,0,1,1,NA)))
colnames(df)<- c("cntry", "gndr", "plcvcrcR", "plcpvcrR", "plccbrgR", "plcarcrR", "plcrspcR")
df

たとえば、各性別 ( gndr) の1-values変数plcpvcrR, plccbrgR,のパーセンテージを示すバープロットを作成するにはどうすればよいplcarcrRですか? できれば、各性別のバーがグループ化され、変数ごとに異なる色になります。

この画像のように、1 つの色が質問を表し、グループが性別を表します (信頼区間なし):

https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSsAlUJsqdhxXHiY35FxFmVx3BREVji_ca24w9ub_OYEfZ3O50X5Q

次の機能を試してみましたが、多くの欠陥があることを認識しています。

barplot(((colSums(df[c(3:5)], na.rm=TRUE)/nrow(df[c(3:5)]))*100)~gndr)
4

1 に答える 1

3

私はこのようなことをします:

require(ggplot2)
require(reshape2)
require(scales)
require(plyr)

# remove NA from gndr
df <- df[!is.na(df$gndr), ]
# now get percentages
df.o <- ddply(df, .(gndr), summarise, 
              plcpvcrR = sum(plcpvcrR == 1, na.rm = T)/sum(!is.na(plcpvcrR)), 
              plccbrgR = sum(plccbrgR == 1, na.rm = T)/sum(!is.na(plccbrgR)), 
              plcrspcR = sum(plcrspcR == 1, na.rm = T)/sum(!is.na(plcrspcR)))
# melt it:
df.m <- melt(df.o, id.var = "gndr")

# plot it:
ggplot(data = df.m, aes(x=gndr)) + geom_bar(aes(weights=value, fill=variable), 
      position = "dodge") + scale_y_continuous(labels=percent)

パーセンテージを取得するためのより簡単で簡単な方法があるかもしれません。プロットは次のとおりです。

ここに画像の説明を入力

于 2013-02-27T18:31:25.813 に答える