我有一个数据框,我想在"值"中绘制3条线。 向量。前两行是由" group"组成的值向量。第3行是UNGROUPED值向量。我目前正在这样做的方法是对DPLYR进行2次调用并创建2个数据帧,然后合并它们,然后绘制合并的数据帧。是否有一种更简单的方法可以避免2次调用DPLYR?
d = data.frame(ym = rep(c(20011,20012,20023),3), group = c(0,0,1,0,1,0,1,0,1), value = c(1,2,3,4,2,1,3,3,2))
############### 1st call to dplyr to create plot with 2 lines grouped by "group"
d2 = d %>%
group_by(ym,group) %>%
summarise(
Value = mean(value)
)
d2= as.data.frame(d2)
d2
ggplot(data=d2 , aes(x=ym, y=Value, group=as.factor(group), colour = as.factor(group))) +
geom_line() + geom_point()
###second call to dplyr to create a second data frame just for the UNGROUPED data
d3 = d %>%
group_by(ym) %>%
summarise(
Value = mean(value)
)
#### merge the data TWO frames
d3 =as.data.frame(d3)
d3$group=2
d4 = rbind(d2,d3)
### plot all 3 lines
ggplot(data=d4 , aes(x=ym, y=Value, group=as.factor(group), colour = as.factor(group))) +
geom_line() + geom_point()
答案 0 :(得分:1)
你可以在一个dplyr
链中完成,但是(AFAIK)它仍然需要两个单独的操作:
d2 = bind_rows(
d %>%
group_by(ym, group=as.character(group)) %>%
summarise(Value = mean(value)),
d %>%
group_by(ym) %>%
summarise(Value = mean(value),
group = "All"))
添加group=as.character(group)
时,必须使用代码group="All"
来避免错误,因为bind_rows
无法自动将group
从数字强制转换为字符。 (当分组列已经是因子或字符时,这一步当然是不必要的。)
然后,为了绘图,您可以突出显示平均线,以便它与各个组分开。我们仅映射到shape
,以便能够移除All
行的点标记:
ggplot(d2 , aes(x=ym, y=Value, colour=group)) +
geom_line(aes(size=group)) +
geom_point(aes(shape=group)) +
scale_color_manual(values=c(hcl(c(15,195),100,65), "black")) +
scale_shape_manual(values=c(16,16,NA)) +
scale_size_manual(values=c(0.7,0.7,1.5))