刚开始遇到问题。我有一个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中工作。
提前感谢您的帮助。