R语言提取数据框指定值计算均值标准差生成新数据框并绘图
R语言批量处理96孔板数据实现分组统计与绘图
场景与需求
- 输入为两列结构的96孔板检测数据框:第一列为孔位坐标,取值格式为行字母+列数字(范围从A1到H12),第二列为对应孔的整数检测值
- 需根据实验设计中「处理组-对应孔位」的归属关系,分组计算每组检测值的均值、标准差
- 输出三列结构化结果:第一列为处理名称,第二列为组内均值,第三列为组内标准差,结果可直接用于绘制带误差棒的柱状图
- 适配多孔板批量处理场景,替代Excel手动操作的繁琐流程
示例输入数据
data <- data.frame(Cell = c("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12"), Value = c(4, 6, 2, 7, 4, 6, 1, 6, 2, 3, 4, 6))
实现代码
1. 配置分组映射规则
按照实际实验设计,提前定义每个处理组包含的孔位,同一实验设计下该配置可复用:
# 格式:处理名 = 对应孔位向量,可根据实际实验设计修改扩展 treatment_map <- list( "A" = c("A6", "A12"), "B" = c("A2", "A8"), "C" = c("A3", "A9"), "D" = c("A4", "A10"), "E" = c("A1", "A5"), "F" = c("A7", "A11") )
2. 通用统计计算函数
加载dplyr包实现数据处理,函数可直接复用在多块板的批量计算场景:
library(dplyr) calc_plate_stats <- function(raw_df, treat_map, cell_col = "Cell", value_col = "Value"){ # 转换映射表为数据框格式 map_table <- stack(treat_map) |> rename(Treatment = ind, !!cell_col := values) # 匹配原始数据、分组计算统计量 stats_result <- raw_df |> inner_join(map_table, by = cell_col) |> group_by(Treatment) |> summarise( Mean = mean(.data[[value_col]], na.rm = TRUE), SD = sd(.data[[value_col]], na.rm = TRUE), .groups = "drop" ) return(stats_result) } # 运行得到统计结果 result <- calc_plate_stats(data, treatment_map)
运行后输出的result结构和期望格式一致:
Treatment Mean SD 1 A 6.0 0.000000 2 B 6.0 0.000000 3 C 2.0 0.000000 4 D 5.0 2.828427 5 E 4.0 0.000000 6 F 2.5 2.121320
注:需求中给出的期望结果数值为格式示例,实际计算值以输入数据和分组映射规则为准;如果实际分组和示例映射不同,修改
treatment_map中的孔位对应关系即可得到匹配实验设计的统计结果。
3. 绘制带误差棒的柱状图
加载ggplot2包直接基于统计结果绘图:
library(ggplot2) ggplot(result, aes(x = Treatment, y = Mean, fill = Treatment)) + geom_col(width = 0.7) + # 绘制均值±标准差的误差棒 geom_errorbar(aes(ymin = Mean - SD, ymax = Mean + SD), width = 0.2, linewidth = 0.8) + labs(x = "处理组", y = "检测值均值", title = "96孔板检测结果统计") + theme_bw() + theme(legend.position = "none")
批量处理提示
- 处理多块孔板时,只需将所有板的原始数据批量读入R,循环调用
calc_plate_stats函数即可一次性得到所有板的统计结果 - 如果原始数据的孔位列、检测值列名和示例不一致,只需修改函数中
cell_col、value_col的入参即可适配
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

