如何借助setDT在计算分组均值时添加标准差以绘制误差棒?
在data.table中同时计算均值与标准差
当然可以在同一段setDT代码里完成,不用分开计算。你只需要调整.SD的处理逻辑,让它同时返回均值和标准差即可,两种常用写法如下:
写法1:每个列返回包含均值和标准差的列表
适合后续需要按列提取统计量的场景:
setDT(df)[, lapply(.SD, function(x) list( mean_val = mean(x, na.rm = TRUE), sd_val = sd(x, na.rm = TRUE) )), keyby = tag]
写法2:将均值和标准差拆分为独立列
更方便直接用于绘图(比如ggplot的误差棒):
# 针对指定列(推荐,性能更好) setDT(df)[, .( col1_mean = mean(col1, na.rm = TRUE), col1_sd = sd(col1, na.rm = TRUE), col2_mean = mean(col2, na.rm = TRUE), col2_sd = sd(col2, na.rm = TRUE) ), keyby = tag] # 或者对所有列批量处理 setDT(df)[, c( lapply(.SD, mean, na.rm = TRUE), lapply(.SD, function(x) sd(x, na.rm = TRUE)) ), keyby = tag] # 批量处理后可手动重命名列,比如给标准差列加_sd后缀
拿到结果后,绘图时直接用均值±标准差作为误差范围即可,比如用ggplot的geom_errorbar,指定ymin = 均值列 - 标准差列,ymax = 均值列 + 标准差列。
内容的提问来源于stack exchange,提问作者SanderOhm
相关产品推荐
相关产品推荐

