按组或行计算 R 中数据帧列表的统计数据

问题描述 投票:0回答:1

我正在对数据进行引导,现在需要计算平均值和 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))

我是新手,这一步花了我几个月的时间才得到我的代码,所以我很疲惫,非常感谢您的帮助。

r dataframe list
1个回答
0
投票

我怀疑你的意思是

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
© www.soinside.com 2019 - 2024. All rights reserved.