我有一个使用 ggplot2 库的条形图:
plot <- qplot(Date, data=cns,
geom="bar", binwidth = 1,
fill=Type, facets = Name ~ .)
Run Code Online (Sandbox Code Playgroud)
这给了我一个多面条形图,按名称。
cns 的前 11 行如下所示:
Name Date Type Days
1 Name 1 2013-03-12 Requested 0
2 Name 1 2013-03-14 Requested 0
3 Name 1 2013-03-19 Requested 0
4 Name 2 2013-03-01 Completed 1
5 Name 2 2013-03-01 Requested 0
6 Name 2 2013-03-07 Completed 3
7 Name 2 2013-03-08 Requested 0
8 Name 2 2013-03-08 Requested 0
9 Name 3 2013-03-08 Completed 0
10 Name 3 2013-03-13 Requested 0
11 Name 3 2013-03-12 Completed 0
Run Code Online (Sandbox Code Playgroud)
我想向每个方面添加一条水平线,其中包含平均天数(特定于方面或名称)。这也很复杂,因为“天”列为所有“请求”类型输入了 0,这意味着要获得我正在寻找的平均值,我真的想要mean(cns$Days)/(NROW(cns)/2).
我试过:
plot + geom_hline(aes(yintercept=(sum(cns$Days)/(NROW(cns)/2))))
Run Code Online (Sandbox Code Playgroud)
但是,正如我所预料的那样,它在每个方面都放置了一条具有相同值的水平线。如果有意义的话,我希望这条线是特定于方面的。
这可以做到吗?
您可以在数据框中创建包含平均值的新列。我将其命名为并使用库中的y.int函数进行计算。这里仅针对 的值计算平均值(应排除)。ddply()plyrTypeCompletedRequested
library(plyr)
cns<-ddply(cns,.(Name),transform,y.int=mean(Days[Type=="Completed"]))
Run Code Online (Sandbox Code Playgroud)
现在使用geom_hline()新列向每个方面添加线条。
plot + geom_hline(aes(yintercept=y.int))
Run Code Online (Sandbox Code Playgroud)