ggplot条形图中的一致条宽,适用于同一数据帧中长度不等的向量

时间:2015-06-16 10:18:19

标签: r ggplot2 dataframe

刚开始遇到问题。我有一个44行数据帧,其中包含3个变量,如下例所示:

> df

    Var_A     Var_B    Var_C
[1]  AA        20      Cat_1
[2]  AA        85      Cat_2
[3]  AB        65      Cat_1
[4]  AC        17      Cat_1
[5]  AC        69      Cat_2
[6]  AD        100     Cat_2
[7]  AE        100     Cat_2
...

> str(df)
'data.frame':   44 obs. of  3 variables:
$ Var_A       : Factor w/ 32 levels "AA","AB",..: 26 29 32 27 17 30 21 11 28 25 ...
..- attr(*, "scores")= num [1:32(1d)] 17429 5067 230 178 21663 ...
.. ..- attr(*, "dimnames")=List of 1
.. .. ..$ : chr  "AA" "AB" "AC" "AD" ...
$ Var_B       : num  20 85 65 17 69 ...
$ Var_C       : chr  "Cat_1 " "Cat_2 " "Cat_1 " "Cat_1 " ...

> dput(df[1:5,])
structure(list(Var_A = structure(c(26L, 29L, 32L, 27L, 
17L), .Label = c("AA", "AB", "AC", "AD", 
"AE", "AF", "AG", "AH", "AI", 
"AJ", "AK", "AL", "AM", "AN", 
"AO", "AP", "AQ", "AR", "AS", 
"AT", "AU", "AV", "AW", "AX", 
"AY", "AZ", "BA", "BB", "BC", "BD", 
"BE", "BF"), class = "factor"), Var_B = c(20, 
85, 65, 17, 69)), Var_C = c("Cat_1 ", 
"Cat_2 ", "Cat_1 ", "Cat_1 ", "Cat_2 "), .Names = c("Var_A", 
"Var_B", "Var_C"), row.names = c(NA, 5L), class = "data.frame")

我希望使用ggplot2对这三个变量进行条形图排列,但是对于Var_A中那些不具备Var_C中两个类别之一的类别,我得到的条形比那些同时具有两个类别的条形图更厚。我查看了其他帖子以解决此问题,并且尽管缺少Var_C中的2个类别之一,但Var_A的条宽度一致,并尝试了以下选项:

选项#1

 > all.df <- rbind(ddply(df,.(Var_A, Var_C), summarise, count = length(Var_C)), 
  c(Cat_1, Cat_2, NA))

但我收到以下消息:

Error in rbind(ddply(df, .(Var_A, Var_C), summarise, count = length(Var_C)),  : 
object 'Cat_1' not found

选项#2:

> all.df <- rbind(df, cbind(expand.grid(Var_A=levels(df$Var_A), Var_C=levels(df$Var_C)), 
Var_B=NA))

但也要获得以下信息:

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 
0, 1

因此,我已经研究了如何组合相等行长的列,但所有可用的答案都描述了如何对2个数据帧执行此操作,而不是在单个数据帧上。我已尝试使用rbind.fill并建立索引,但到目前为止,我还没有达到预期的效果。

我在Windows 7中的Rstudio版本0.99.441中工作。

提前感谢您的帮助。

0 个答案:

没有答案