R语言 如何按组获得汇总统计数据
在这篇文章中,我们将学习如何在R编程语言中按组获得汇总统计数据。
使用中的数据框架样本
方法1:使用 tapply( )
R语言中的 tapply() 函数 用于在一个由因子组合给出的向量子集上应用一个函数。根据语法,这个函数需要3个参数。第一个参数是数据列,第二个参数是数据将被分组的列,在这个例子中,数据是根据字母分组的。第三个参数是一个将应用于每个组的函数,在这个例子中,我们传递了 summary()函数 ,因为我们想按组计算汇总统计数据。
语法: tapply(dfgroupBy, summary)
参数
- df$data: 要应用摘要函数的数据
- df$groupBy: 数据应按其分组的列
- summary: 总结函数被应用于每个组
例子: R程序按组获得汇总统计数据
num < - c(20, 30, 40, 50, 50, 70, 80, 25, 35, 45, 55, 65, 75, 85, 95, 105) char < - factor( rep(LETTERS[1:5], c(3, 2, 4, 1, 6)) df < - data.frame(grpBy=char, num=num) tapply( dfgrpBy, summary)
输出
方法2:使用data.table方法
在这种方法中,我们首先需要使用library()函数导入 data.table 包。然后我们将data.frame转换为data.table,data.table在R中是data.frame的一个增强版本。由于它的执行速度和较少的代码输入,它在R中变得很流行。然后是最重要的一步,我们按照提供的语法计算每组的汇总统计数据。
语法
setDT(df)
df[, as.list(summary(num)), by = grpBy] 。
参数
- df: 数据框架对象
- num: 数据列
- grpBy: 要进行分组的列
- summary(): 应用于每个组的函数
例子: R程序,通过分组获得汇总统计信息
library(data.table)
num < - c(20, 30, 40, 50, 50, 70, 80, 25,35, 45, 55, 65, 75, 85, 95, 105)char < - factor(rep(LETTERS[1:5], c(3, 2, 4, 1, 6))df < - data.frame(grpBy=char, num=num)setDT(df)df[, as.list(summary(num)), by =grpBy]
输出
方法3:使用split()函数和purrr包
R语言中的split()函数用于将数据向量划分为由所提供的因子定义的组。我们使用 library() 函数导入 purrr 库。purrr是一个函数式编程工具箱。它带有许多有用的函数,如map。map()函数遍历所有组,并将输出作为一个列表返回。它允许我们取代代码中的for循环,使其更容易阅读。
语法: df %>% split(.$grpBy) %>% map(summary)
参数
df: 数据框架对象
grpBy: 数据框架的列,根据它应该被分组。
例子: R程序通过分组获得汇总统计信息
library(purrr)
num < - c(20, 30, 40, 50, 50, 70, 80, 25,35, 45, 55, 65, 75, 85, 95, 105)char < - factor(rep(LETTERS[1:5], c(3, 2, 4, 1, 6))df < - data.frame(grpBy=char, num=num)df % > % split(. $grpBy) % > % map(summary)
输出
方法4:使用dplyr
使用group_by函数按提供的变量进行分组。然后用summaryize函数对分组后的数据计算最小值、q1、中位数、平均值、q3、最大值。这些统计值与 summary 函数产生的值相同。唯一的区别是,在这里我们必须使用 summaryize 函数在分组数据上明确调用这些函数。这个函数根据指定的函数将分组的列还原为一个单一的值。
语法
df %>%
group_by(grpBy) %>%
summarize(min = min(num), q1 = quantile(num, 0.25), median = median(num), mean = mean(num), q3 = quantile(num, 0.75), max = max(num)
参数
df: 数据框架对象
grpBy: 要进行分组的列
例子: R程序,通过分组获得汇总统计数据
输出