R语言 如何按组获得汇总统计数据

R语言 如何按组获得汇总统计数据

在这篇文章中,我们将学习如何在R编程语言中按组获得汇总统计数据。

使用中的数据框架样本

   grpBy num
1      A  20
2      A  30
3      A  40
4      B  50
5      B  50
6      C  70
7      C  80
8      C  25
9      C  35
10     D  45
11     E  55
12     E  65
13     E  75
14     E  85
15     E  95
16     E 105

方法1:使用 tapply( )

R语言中的 tapply() 函数 用于在一个由因子组合给出的向量子集上应用一个函数。根据语法,这个函数需要3个参数。第一个参数是数据列,第二个参数是数据将被分组的列,在这个例子中,数据是根据字母分组的。第三个参数是一个将应用于每个组的函数,在这个例子中,我们传递了 summary()函数 ,因为我们想按组计算汇总统计数据。

语法: tapply(dfdata, 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( dfnum, dfgrpBy, summary)

输出

$A
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      25      30      30      35      40 
$B
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     50      50      50      50      50      50 
$C
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   25.0    32.5    52.5    52.5    72.5    80.0 
$D
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     45      45      45      45      45      45 
$E
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   55.0    67.5    80.0    80.0    92.5   105.0 

方法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]

输出

   grpBy Min. 1st Qu. Median Mean 3rd Qu. Max.
1:     A   20    25.0   30.0 30.0    35.0   40
2:     B   50    50.0   50.0 50.0    50.0   50
3:     C   25    32.5   52.5 52.5    72.5   80
4:     D   45    45.0   45.0 45.0    45.0   45
5:     E   55    67.5   80.0 80.0    92.5  105

方法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)

输出

$A
 grpBy      num    
 A:3   Min.   :20  
 B:0   1st Qu.:25  
 C:0   Median :30  
 D:0   Mean   :30  
 E:0   3rd Qu.:35  
       Max.   :40  
$B
 grpBy      num    
 A:0   Min.   :50  
 B:2   1st Qu.:50  
 C:0   Median :50  
 D:0   Mean   :50  
 E:0   3rd Qu.:50  
       Max.   :50  
$C
 grpBy      num      
 A:0   Min.   :25.0  
 B:0   1st Qu.:32.5  
 C:4   Median :52.5  
 D:0   Mean   :52.5  
 E:0   3rd Qu.:72.5  
       Max.   :80.0  
$D
 grpBy      num    
 A:0   Min.   :45  
 B:0   1st Qu.:45  
 C:0   Median :45  
 D:1   Mean   :45  
 E:0   3rd Qu.:45  
       Max.   :45  
$E
 grpBy      num       
 A:0   Min.   : 55.0  
 B:0   1st Qu.: 67.5  
 C:0   Median : 80.0  
 D:0   Mean   : 80.0  
 E:6   3rd Qu.: 92.5  
       Max.   :105.0  

方法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程序,通过分组获得汇总统计数据

library(dplyr)

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 % >%  
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)

输出

  grpBy   min    q1 median  mean    q3   max
  <fct> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>
1 A        20  25     30    30    35      40
2 B        50  50     50    50    50      50
3 C        25  32.5   52.5  52.5  72.5    80
4 D        45  45     45    45    45      45
5 E        55  67.5   80    80    92.5   105

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程