我正在对数据进行引导,现在需要计算平均值和 95% CI。我已经对数据进行了 1000 次重新采样并计算了自定义统计数据,我们将其称为 CS,它是数据框中的一列。现在,我正在尝试压平/合并 1000 个数据帧的列表,或者计算 R 中数据帧列表的平均值和置信区间,无论是按行还是按组(我们将该组列称为 CNNgroup) .
df1 <- data.frame("CNNgroup" = c(90, 91, 92), "CS" = c(0.01, 0.2, 0.1))
df2 <- data.frame("CNNgroup" = c(90, 91, 92), "CS" = c(-0.01, -0.2, -0.1))
df3 <- data.frame("CNNgroup" = c(90, 91, 92), "CS" = c(0.06, 0.8, 0.85))
df.list <- list(df1,df2,df3)
期望的输出:(免责声明,CI 可能无法正确计算,但你明白我希望的想法)
CNNgroup CSmean CIlow CIhigh
90 0.1033333 −0.133 0.339
91
92
93
我已经尝试过使用这篇文章按照以下代码,结果是所有方法都不适用。
bind_rows(mylist) %>%
group_by(CNNgroup) %>%
summarise(value_mean = mean(CS, na.rm = TRUE))
然后我尝试压平列表,但丢失了 CNNgroup 信息......
do.call(rbind, lapply(mylist, as.data.frame.table, na.rm = TRUE))
我是新手,这一步花了我几个月的时间才得到我的代码,所以我很疲惫,非常感谢您的帮助。
我怀疑你的意思是
df.list
你有 mylist
。
从 dplyr 1.1.0(2023 年 3 月)开始,我们可以使用
.by
在汇总中进行分组,并且可以使用 across
与多个函数一起使用,一步获得您想要的摘要:
bind_rows(df.list) %>%
summarise(across(CS, list(mean = mean,
low = min,
high = max)), .by = CNNgroup)
结果
CNNgroup CS_mean CS_low CS_high
1 90 0.0200000 -0.01 0.06
2 91 0.2666667 -0.20 0.80
3 92 0.2833333 -0.10 0.85