r - 转换数据框列表以获得 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个数据帧,如下图所示:
- 计算每个 IHA 的平均值(不拆分为子流域或年份)
- 计算每个 IHA 的平均值(拆分为年份但不拆分为子流域)
- 计算每个 IHA 的平均值(拆分为子流域但不拆分为年份)
实际上,我的清单包含更多的子流域和 IHA 指标
对于 1. 我设法创建了这个:
test <- Flowtest %>%
reduce(bind_rows) %>%
summarise_all(mean) %>%
select(-Year)
我想创建与上述代码类似的代码,以获得如 2. 和 3. 所示的结果(如图所示)。我怎样才能做到这一点?
解决方案
嗨乔安娜一个可能的解决方案是这样的:
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))
推荐阅读
- typo3 - 澄清 composer.json 中用于 TYPO3 扩展的替换和额外部分
- c# - 在缩进模式下使用 XmlWriter 时是否可以在特定属性上手动换行?
- spring-security - HTTP 基本身份验证不适用于控制器
- php - 数据透视表中的学生出勤报告
- qt - 无法在 Maya 中导入 Qt for Python
- sql-server - 将逗号值分隔为单个值
- python - 使用 Qt Designer 在 PySide2 中实现信号/插槽时出错
- oracle - 如何在 Docker 上使用 oracle11g?
- arrays - 在特定范围内增加数组中每个元素的值
- node.js - 深度嵌套的 Express 路由器中的 Socket.io