You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中对数据框列表按组计算均值与95%置信区间

解决Bootstrap结果的分组统计问题

方法1:合并所有数据框后分组计算

先确保每个子数据框的*CNNgroup*和*CS*列结构一致(比如都是字符/因子、数值类型),然后合并后分组统计:

library(dplyr)
library(purrr)

# 合并所有数据框(假设你的列表叫boot_list)
combined_df <- bind_rows(boot_list)

# 按*CNNgroup*分组,计算*CS*的均值、95%置信区间
result <- combined_df %>%
  group_by(CNNgroup) %>%
  summarize(
    cs_mean = mean(CS, na.rm = TRUE),
    cs_ci_lower = quantile(CS, 0.025, na.rm = TRUE),
    cs_ci_upper = quantile(CS, 0.975, na.rm = TRUE)
  )

如果之前bind_rows出NA,检查每个子数据框:用map(boot_list, str)查看列类型,确保*CNNgroup*和*CS*的类型在所有子框中一致,比如统一把*CNNgroup*转成因子:

boot_list <- map(boot_list, ~ .x %>% mutate(CNNgroup = as.factor(CNNgroup)))

方法2:先按列表元素分组统计,再汇总

如果担心合并数据框内存占用大,可以先对每个Bootstrap样本计算分组均值,再基于这些均值计算整体的均值和置信区间:

# 对每个子数据框计算分组*CS*均值
group_means_per_boot <- map_dfr(boot_list, ~ .x %>%
  group_by(CNNgroup) %>%
  summarize(cs_boot_mean = mean(CS, na.rm = TRUE)) %>%
  ungroup())

# 基于所有Bootstrap的分组均值,计算最终的均值和95%CI
final_result <- group_means_per_boot %>%
  group_by(CNNgroup) %>%
  summarize(
    cs_overall_mean = mean(cs_boot_mean, na.rm = TRUE),
    cs_ci_lower = quantile(cs_boot_mean, 0.025, na.rm = TRUE),
    cs_ci_upper = quantile(cs_boot_mean, 0.975, na.rm = TRUE)
  )

排查之前的问题

  • 用bind_rows出NA:大概率是子数据框的列类型不匹配,比如有的*CNNgroup*是字符,有的是因子,或者*CS*列存在NA但没加na.rm=TRUE参数。
  • 扁平化列表丢失*CNNgroup*信息:应该是用了错误的扁平化方式(比如直接unlist),用bind_rows或map_dfr可以完整保留所有列信息。

内容的提问来源于stack exchange,提问作者KNN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:25:01