2012-11-22 46 views
1

我想比較兩個問題(列Q1_bQ2_b)並將它們彼此相鄰(在相同的barplot中),答案選項爲1-6。問題是沒有人用4回答Q1_b,所以barplot跳到顯示5,其中4應該是Q1_b,旁邊是Q2_b回答4的人的百分比。我如何確保R不執行此操作並在沒有任何特定選項的答案時自動輸入0%列?如何避免與0頻率下降水平

alldataset<-structure(list(Q1_b = c(6L, 1L, 5L, 3L, 5L, 6L, 6L, 2L), 
          Q2_b = c(1L, 2L, 2L, 5L, 4L, 3L, 6L, 1L)), 
         .Names = c("Q1_b", "Q2_b"), 
         class = "data.frame", 
         row.names = c(NA, -8L)) 

Qb<-table(alldataset$Q2_b) 
Qf<-table(alldataset$Q1_b) 

nrowFUP<-NROW(alldataset$Q1_b) 
nrowBL<-NROW(alldataset$Q2_b) 

options(digits=6) 
newbl <- transform(as.data.frame(table(alldataset$Q2_b)),  
       percentage_column=Freq/nrowBL*100) 

newfup <- transform(as.data.frame(table(alldataset$Q1_b)), 
        percentage_column=Freq/nrowFUP*100) 


matrixQ1<-cbind(newbl$percentage_column, newfup$percentage_column) 

matrixQ1dataframe<-data.frame(matrixQ1) 
rmatrixQ1<-as.vector(t(matrixQ1dataframe)) 
roundedrmatrix<-round(rmatrixQ1, digits=0) 
barplotmatrix<-matrix(roundedrmatrix) 

par(mar=c(7.5,4,3,2), mgp=c(2,.7,0), tck=-.01, las=1, xpd=TRUE) 

b<-barplot(matrix(roundedrmatrix, nr=2), 
      beside=T, xlab="", 
      ylab="Percentage", 
      cex.lab=0.9, 
      main="Comparison", 
      cex.main=0.9, ylim=c(0,70), 
      col=c("black","yellow"), 
      names.arg=c(1:6), 
      legend=c("Q2_b","Q1_b"), 
      args.legend=list(x="bottomleft", 
          cex=0.8, 
          inset=c(0.4,-0.4))) 
text(x=b, y=roundedrmatrix,labels=roundedrmatrix, pos=3, cex=0.8) 

R還警告我,這將通過顯示發生:

Warning message: 
In cbind(newbl$percentage_column, newfup$percentage_column) : 
    number of rows of result is not a multiple of vector length (arg 2) 

我一直在試圖爲年齡來排序了這一點,但我沒有得到任何地方。誰能幫忙?

+0

我用這種形式'alldataset <數據 - data.frame(Q1_b = C(26,1,5,3 ,5,6,6,2),Q2_b = c(1,2,2,5,4,3,6,1))',它對我沒有任何錯誤。你可以輸入(alldataset)'幷包含結果嗎? – MattBagg

+0

@MattBagg dput(alldataset)的結果是: 結構(列表(Q1_b = c(6L,1L,5L,3L,5L,6L,6L,2L),Q2_b = c(1L, 2L,2L,5L ,4L,3L,6L,1L)),.Names = c(「Q1_b」,「Q2_b」),class =「data.frame」,row.names = c(NA, -8L)) – user1844747

回答

3

問題是,您從未告訴R您的向量表示具有1-6潛在值的分類響應,因此它不知道包括0計數(您不希望它包括0代表7,8 ,100萬等)。

嘗試用更換您的第一個2線:

Qb<-table(factor(alldataset$Q2_b, levels=1:6)) 
Qf<-table(factor(alldataset$Q1_b, levels=1:6)) 

或運行somethingn,如:

alldataset$Q1_b <- factor(alldataset$Q1_b, levels=1:6) 
alldataset$Q2_b <- factor(alldataset$Q2_b, levels=1:6) 

表命令之前。

2

您需要告訴table使用所有從1到6的值與table(factor(x, seq.int(6)))

這裏是您的代碼的改進版本:

dat <- t(round(sapply(rev(alldataset), 
         function(x) table(factor(x, seq.int(6))))/
                 nrow(alldataset) * 100)) 

par(mar=c(7.5,4,3,2), mgp=c(2,.7,0), tck=-.01, las=1, xpd=TRUE) 
b <- barplot(dat, beside=T,xlab="", ylab="Percentage", cex.lab=0.9, 
      main="Comparison", cex.main=0.9, ylim=c(0,70), 
      col=c("black","yellow"), names.arg=c(1:6), legend=names(dat), 
      args.legend=list(x="bottomleft", cex=0.8, inset=c(0.4,-0.4))) 
text(x=b, y=dat,labels=dat, pos=3, cex=0.8) 

enter image description here

+0

謝謝大家這麼多,這是非常有幫助的! – user1844747