在R软件中构建含均值±SD及显著性水平的双因素ANOVA汇总表
R实现带均值±SD及显著性标记的汇总表
1. 加载所需包
首次运行先安装依赖包,之后直接加载即可:
# 安装依赖包 install.packages(c("dplyr", "emmeans", "multcomp", "tidyr")) # 加载包 library(dplyr) library(emmeans) library(multcomp) library(tidyr)
2. 导入/模拟数据集
替换下方模拟代码为你的真实数据读取逻辑(比如read.csv("your_data.csv")):
# 模拟符合你需求的数据集(2处理、19基因型、3重复、10参数) set.seed(123) # 固定随机种子保证结果可复现 data <- expand.grid( treat = c("处理1", "处理2"), genotype = paste0("基因型", 1:19), rep = 1:3 ) %>% mutate( 参数1 = rnorm(nrow(.), mean = 50, sd = 5), 参数2 = rnorm(nrow(.), mean = 20, sd = 3), 参数3 = rnorm(nrow(.), mean = 80, sd = 7), 参数4 = rnorm(nrow(.), mean = 15, sd = 2), 参数5 = rnorm(nrow(.), mean = 35, sd = 4), 参数6 = rnorm(nrow(.), mean = 60, sd = 6), 参数7 = rnorm(nrow(.), mean = 25, sd = 3), 参数8 = rnorm(nrow(.), mean = 70, sd = 5), 参数9 = rnorm(nrow(.), mean = 10, sd = 1), 参数10 = rnorm(nrow(.), mean = 45, sd = 5) )
3. 批量处理参数生成汇总表
定义函数批量完成均值±SD计算、方差分析与显著性字母标记:
# 单个参数处理函数 process_single_param <- function(data, param_col) { # 计算均值±SD stat_summary <- data %>% group_by(treat, genotype) %>% summarise( mean_val = mean(.data[[param_col]]), sd_val = sd(.data[[param_col]]), .groups = "drop" ) %>% mutate(mean_sd = sprintf("%.2f ± %.2f", mean_val, sd_val)) %>% select(treat, genotype, mean_sd) # 方差分析(处理×基因型交互模型) anova_model <- aov(.data[[param_col]] ~ treat * genotype, data = data) # 多重比较生成显著性字母(Tukey法) emm_result <- emmeans(anova_model, ~ treat * genotype) signif_letters <- cld(emm_result, adjust = "tukey", Letters = letters, sort = FALSE) # 合并结果 stat_summary %>% left_join(signif_letters %>% select(treat, genotype, .group), by = c("treat", "genotype")) %>% rename(signif_mark = .group) %>% mutate(param = param_col) } # 批量处理10个参数 param_names <- paste0("参数", 1:10) all_results <- lapply(param_names, function(x) process_single_param(data, x)) %>% bind_rows() # 转换为宽格式(匹配常规汇总表结构) final_table <- all_results %>% pivot_wider( id_cols = c(treat, genotype), names_from = param, values_from = c(mean_sd, signif_mark) )
4. 查看或导出结果
# 查看前5行结果 head(final_table, 5) # 导出为CSV文件(可直接用于Excel/WPS编辑) write.csv(final_table, "带显著性标记的汇总表.csv", row.names = FALSE)
关键说明
- 多重比较默认用
Tukey法,可修改adjust参数切换为bonferroni等其他校正方法 - 显著性字母默认小写,需大写可改
Letters = LETTERS - 若处理与基因型交互不显著,可将方差模型改为
~ treat + genotype
内容的提问来源于stack exchange,提问作者ORBITTING ARYABHATA
相关产品推荐
相关产品推荐

