通过在 R 中使用列表的组计算平均值

Posted

技术标签:

【中文标题】通过在 R 中使用列表的组计算平均值【英文标题】:Compute mean by groups working with lists in R 【发布时间】:2021-11-30 02:25:49 【问题描述】:

我想:

    在每个列表中使用以下变量(idmonth)进行分组。然后,我想平均感兴趣变量的值 (preds)
id <- c(1,2,3,4,5,1,2,3,4,5)
month <- c(3,4,2,1,5,7,3,1,8,9)
preds <- c(0.5,0.1,0.15,0.23,0.75,0.6,0.49,0.81,0.37,0.14)

l_1 <- data.frame(id, preds, month)

preds <- c(0.45,0.18,0.35,0.63,0.25,0.63,0.29,0.11,0.17,0.24)

l_2 <- data.frame(id, preds, month)

preds <- c(0.58,0.13,0.55,0.13,0.76,0.3,0.29,0.81,0.27,0.04)

l_3 <- data.frame(id, preds, month)

preds <- c(0.3,0.61,0.18,0.29,0.85,0.76,0.56,0.91,0.48,0.91)

l_4 <- data.frame(id, preds, month)

outcome <- list(l_1, l_2, l_3, l_4)

我尝试使用地图功能和 sapply 没有任何成功。 有什么帮助吗?

提前谢谢你

【问题讨论】:

【参考方案1】:

使用lapply()aggregate()

res1 <- lapply(
  outcome, 
  function(x)
    aggregate(
      preds ~ id + month,
      data = x,
      FUN = mean
    )[,names(x)]
  
)

【讨论】:

谢谢@hello_friend。请注意,您的代码不会创建 outcome2。结果 2 中的每个列表每个变量都有 8 个观察值,而您的代码给出了原始数字 (10),因此它没有汇总信息以创建平均值 我不知道你的结果是什么,但这段代码绝对是,对于每个列表元素,按 id 和月份分组并生成 preds 的平均值。【参考方案2】:

使用tidyverse -

library(dplyr)
library(purrr)

map(outcome, ~.x %>% 
               group_by(id, month) %>% 
               summarise(preds = mean(preds), .groups = 'drop'))

【讨论】:

以上是关于通过在 R 中使用列表的组计算平均值的主要内容,如果未能解决你的问题,请参考以下文章

将矩阵值计算为 R 中列表中所有成对比较的平均值

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度

在 4 个单独的图上绘制每个评级的组平均值

R语言 平均值,中位数和模式

如何在 R 的列表中按组获取平均值