亲爱的Stackoverflow成员,
我有一个由以下内容组成的数据集:一列lang
包含五种不同的语言。另外两列CAN
和INT
包含(0,1)。您可以看到数据here
我想为每种语言绘制两个条形图,一个用于CAN== 0
,另一个用于CAN==1
。 y轴应为INT
(或INT==1
)的行数。我希望这些条形图上有误差条。有些帖子建议使用melt()
将格式转换为长格式。但是,由于我的数据是连续的,因此无法正常工作。
答案 0 :(得分:1)
<强>更新强>
我昨晚看了stat_summary
,也许它有效,但我做不到。所以我仍然认为geom_errorbar
是最先建议的方式。
首先,计算CI我写了一个函数。可能有一个内置,但我不知道。
BinCI <- function(x) {
p <- mean(x)
s <- sqrt(p * (1 - p) / length(x))
i <- s * 2
i
}
其次是数据操作:
df2 <- unite(df, uLang, c(Lang, CAN), remove = FALSE) %>% # Create the groups
group_by(Lang, uLang) %>%
summarize(prop = mean(INT), ci = BinCI(INT)) # Calculate the mean and CI using the `BinCI` function
Lang uLang prop ci
Ar Ar_0 0.07200000 0.04623972
Ar Ar_1 0.44406780 0.05785682
Kic Kic_0 0.16000000 0.06558048
Kic Kic_1 0.44745763 0.05789989
Sp Sp_0 0.04968944 0.03425168
Sp Sp_1 0.24390244 0.04742311
Yuc Yuc_0 0.16800000 0.06687923
Yuc Yuc_1 0.40780142 0.05852797
Zap Zap_0 0.15151515 0.06241559
Zap Zap_1 0.26785714 0.04831810
第三,情节:
ggplot(df2, aes(uLang, prop, fill = Lang)) +
geom_col() +
geom_errorbar(aes(ymin = prop - ci, ymax = prop + ci), width = 0.3) +
guides(fill = FALSE)