组之间的ggplot差异

时间:2019-07-15 15:05:17

标签: r ggplot2 group-by difference

我有一个包含不同试验组的df,并且我想制作一个仅显示ggplot中试验之间的增量的条形图。很难让ggplot理解我想要一个df中的差异。另外,某些治疗方法未在第二次试验中得到体现,因此我只想将其视为0(即,增量为=试验1-0)。

 set.seed(1)

 df <- data.frame((matrix(nrow=175,ncol=4)))
 colnames(df) <- c("group","trial","count","hour")
 df$group <- rep(c("A","B","C","D","A","B","D"),each=25)
 df$trial <- rep(c(rep(1,times=100),rep(2,times=75)))
 df$count <- runif(175,0,50)
 df$hour <- rep(1:25,times=7)


 df2 <- aggregate(df[,3:4],list(df$group,df$trial),mean)
 colnames(df2)[1:2] <- c("group","trial") 

那是我必须去的地方。我已经为(group * trial)绘制了单独的条形图,但是我不知道如何减去它们。我想要x = group和y = delta(trial)的图。

我尝试过:

 ggplot(df2 %>% group_by(group) %>% delta=diff(count),
   aes(x=group,y=delta)) + geom_bar()

我遇到过类似的帖子,但没有运气。

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

ggplot(df2 %>% group_by(group) %>% summarise(delta=ifelse(nrow(.)>1,diff(count),0)),
       aes(x=group,y=delta)) + geom_col()#geom_bar(stat="identity")

问题在于,当只有一个输入值时,“ diff”返回的值不是0而是一个长度为0的向量。另外,建议不要使用geom_bar,而建议使用geom_col。您应该考虑的另一件事是,差异结果取决于数据帧的顺序。因此,我建议使用

ggplot(df2 %>% group_by(group) %>% summarise(delta_trial_1_trial_2=
                                           ifelse(length(trial)>1,
                                                  count[trial==2]-count[trial==1],0)),
   aes(x=group,y=delta_trial_1_trial_2)) + geom_col()