首页 > 解决方案 > 转换数据框列表以获得 df 名称和年度均值的均值

问题描述

我正在用 R 语言分析河流流量数据,并且我有一个数据框列表。每个数据框代表一个子流域(910、950、1012 和 1087),具有完全相同的结构和变量数量,并包含每年 (2004:2007) 的 IHA 指标值(IHA1、IHA2)

Flowtest <- list("910" = tibble(Year = c(2004:2007), IHA1=c(123, 170, 187, 245), IHA2=c(679, 870, 789, 233)),
                 "950" = tibble(Year = c(2004:2007), IHA1=c(570, 450, 780, 650), IHA2=c(230, 470, 687, 321)),
                 "1012" = tibble(Year = c(2004:2007), IHA1=c(160, 170, 670, 780), IHA2=c(350, 840, 701, 353)),
                 "1087" = tibble(Year = c(2004:2007), IHA1=c(120, 780, 820, 580), IHA2=c(870, 870, 763, 291)))

结果我想获得3个数据帧,如下图所示:

  1. 计算每个 IHA 的平均值(不拆分为子流域或年份)
  2. 计算每个 IHA 的平均值(拆分为年份但不拆分为子流域)
  3. 计算每个 IHA 的平均值(拆分为子流域但不拆分为年份)

实际上,我的清单包含更多的子流域和 IHA 指标

在此处输入图像描述

对于 1. 我设法创建了这个:

    test <- Flowtest %>% 
      reduce(bind_rows) %>% 
      summarise_all(mean) %>%
      select(-Year)

我想创建与上述代码类似的代码,以获得如 2. 和 3. 所示的结果(如图所示)。我怎样才能做到这一点?

标签: rlistmean

解决方案


嗨乔安娜一个可能的解决方案是这样的:

library(plyr)
library(dplyr)

# bind list to a tibble and make list names to a column
Flowtest_df <- plyr::ldply(Flowtest, data.frame) %>% 
  dplyr::rename(RCH = 1)

# mean
Flowtest_df %>% 
  dplyr::summarise(IHA1_mean = mean(IHA1),
                   IHA2_mean = mean(IHA2))
# year mean
Flowtest_df %>% 
  dplyr::group_by(Year) %>% 
  dplyr::summarise(IHA1_mean = mean(IHA1),
                   IHA2_mean = mean(IHA2))
# RCH mean
Flowtest_df %>%  
  dplyr::group_by(RCH) %>% 
  dplyr::summarise(IHA1_mean = mean(IHA1),
                   IHA2_mean = mean(IHA2))

推荐阅读