我在R中有以下数据。
oligo condition score
REF Sample 27.827
REF Sample 24.622
REF Sample 31.042
REF Competitor 21.066
REF Competitor 18.413
REF Competitor 36.164
ALT Sample 75.465
ALT Sample 57.058
ALT Sample 66.408
ALT Competitor 35.420
ALT Competitor 17.652
ALT Competitor 21.466
我已经想过了,并使用dplyr中的group_by
和summarise
函数获取每种条件的平均分数。
emsa_test <- emsa_1 %>%
group_by(oligo,condition) %>%
summarise_all(mean)
创建此表。
oligo condition score
ALT Competitor 24.84600
ALT Sample 66.31033
REF Competitor 25.21433
REF Sample 27.83033
然后我使用ggplot2进行绘制。
ggplot(emsa_test, aes(oligo, score)) +
geom_bar(aes(fill = condition),
width = 0.4, position = position_dodge(width=0.5), color = "black", stat="identity", size=.3) +
theme_bw() +
ggtitle("CEBP\u03b1") +
theme(plot.title = element_text(size = 40, face = "bold", hjust = 0.5)) +
scale_fill_manual(values = c("#d8b365", "#f5f5f5"))
我的问题是我需要在绘图中添加误差线。实现将与此类似。
geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1, position=pd)
但是,在删除数据之后,表1中包含的最大和最小信息将丢失。我可以手动添加误差线,但是我要绘制一些图,所以想知道是否有办法通过管道保留此信息。
非常感谢。
答案 0 :(得分:3)
您可以像这样通过dplyr
来动态计算分量:
library(tidyverse)
df <- read_table(
"oligo condition score
REF Sample 27.827
REF Sample 24.622
REF Sample 31.042
REF Competitor 21.066
REF Competitor 18.413
REF Competitor 36.164
ALT Sample 75.465
ALT Sample 57.058
ALT Sample 66.408
ALT Competitor 35.420
ALT Competitor 17.652
ALT Competitor 21.466"
)
df %>%
group_by(oligo, condition) %>%
summarise(
mean = mean(score),
sd = sd(score),
n = n(),
se = sd / n
) %>%
ggplot(aes(x = oligo, y = mean, fill = condition)) +
geom_col(position = position_dodge()) +
geom_errorbar(
aes(ymin = mean - se, ymax = mean + se),
position = position_dodge2(padding = 0.5)
) +
labs(
title = "Mean Score ± 1 SE"
)
由reprex package(v0.2.1)于2019-04-01创建
答案 1 :(得分:1)
您可以汇总多个值并保留min
max
和mean
:
emsa_test <- emsa_1 %>%
group_by(oligo,condition) %>%
summarise(mean=mean(score),min=min(score),max=max(score))
答案 2 :(得分:0)
没有足够的声誉发表评论,但刚刚注意到 JasonAizkalns 的回答中的一个错误,以防其他人简单地复制代码:se = sd/sqrt(n)