You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中对数据框指定列批量应用函数列表

按分组应用自定义函数列表生成汇总表

问题场景

现有如下数据框:

riverdischarge
river1500
river1450
river1200
river1250
river2375
river2235
river2130
river2250

需要按river分组,将以下自定义函数列表应用到discharge列,生成包含各统计量的宽格式汇总表:

# 需先加载lfstat包,lfquantile函数来自此包
library(lfstat)

f <- list(
  mean = function(x, ...) mean(x),
  Q50 = function(x, ...) lfquantile(x, exc.freq = 0.5),
  Q95 = function(x, ...) lfquantile(x, exc.freq = 0.95),
  Q90 = function(x, ...) lfquantile(x, exc.freq = 0.9),
  Q70 = function(x, ...) lfquantile(x, exc.freq = 0.7)
)

实现方案

方法1:使用dplyr(tidyverse生态)

适合习惯tidy语法的用户,代码简洁直观:

library(dplyr)

# 创建示例数据框(已有数据可跳过此步骤)
df <- data.frame(
  river = c("river1", "river1", "river1", "river1", "river2", "river2", "river2", "river2"),
  discharge = c(500, 450, 200, 250, 375, 235, 130, 250)
)

# 分组计算各统计量
result_df <- df %>%
  group_by(river) %>%
  summarize(across(discharge, f, .names = "{.fn}")) %>%
  ungroup()

print(result_df)

方法2:使用Base R

无需额外安装包,适合轻量场景:

# 创建示例数据框
df <- data.frame(
  river = c("river1", "river1", "river1", "river1", "river2", "river2", "river2", "river2"),
  discharge = c(500, 450, 200, 250, 375, 235, 130, 250)
)

# 分组应用函数列表
result_base <- aggregate(discharge ~ river, data = df, FUN = function(x) {
  sapply(f, function(func) func(x))
})

# 转换为标准数据框格式
result_base <- do.call(data.frame, result_base)
colnames(result_base) <- c("river", names(f))

print(result_base)

方法3:使用data.table

处理大数据集时效率更高:

library(data.table)

# 创建示例data.table
dt <- data.table(
  river = c("river1", "river1", "river1", "river1", "river2", "river2", "river2", "river2"),
  discharge = c(500, 450, 200, 250, 375, 235, 130, 250)
)

# 分组计算各统计量
result_dt <- dt[, lapply(f, function(func) func(discharge)), by = river]

print(result_dt)

输出结果

三种方法都会生成如下格式的汇总表(数值为实际计算结果):

rivermeanQ50Q95Q90Q70
river1350325490480425
river2247.5242.5360345295

内容的提问来源于stack exchange,提问作者Faranak omidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:46:08