如何在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
方法一:使用tapply()
R 语言中的tapply()函数用于将函数应用于由因子组合给出的向量子集。此函数根据语法采用 3 个参数。第一个参数是数据列,第二个参数是数据分组所依据的列,在这个例子中,数据是根据字母分组的。第三个参数是将应用于每个组的函数,在此示例中,我们传递了summary()函数,因为我们要按组计算汇总统计信息。
Syntax: tapply(df$data, df$groupBy, summary)
Parameters:
- df$data: data on which summary function is to be applied
- df$groupBy: column according to which the data should be grouped by
- summary: summary function is applied to each group
示例: R 程序按组获取汇总统计信息
R
R
R
R
输出:
$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,R中的data.table是data.frame的增强版。由于它的执行速度和键入的代码较少,它在 R 中变得流行。然后最重要的一步,我们遵循提供的语法并计算每个组的汇总统计信息。
Syntax:
setDT(df)
df[, as.list(summary(num)), by = grpBy]
Parameters:
- df: dataframe object
- num: data column
- grpBy: column according to which grouping is to be done
- summary(): function applied on each group
示例: R 程序按组获取汇总统计信息
电阻
输出:
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
方法三:使用split()函数和purrr包
R 语言中的 split()函数用于将数据向量划分为由提供的因子定义的组。我们使用library()函数导入purrr库。purrr 是一个函数式编程工具包。它带有许多有用的功能,例如地图。 map()函数遍历所有组并以列表形式返回输出。它允许我们在代码中替换 for 循环并使其更易于阅读。
Syntax: df %>% split(.$grpBy) %>% map(summary)
Parameters:
df: dataframe object
grpBy: dataframe column according to which it should be grouped
示例: R 程序按组获取汇总统计信息
电阻
输出:
$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
方法四:使用dplyr
group_by函数用于按提供的变量进行分组。然后使用汇总函数计算分组数据的最小值、q1、中值、平均值、q3、最大值。这些统计值与汇总函数产生的值相同。唯一的区别是,在这里我们必须使用汇总函数对分组数据显式调用这些函数。该函数按照指定的函数减少了分组列的单个值。
Syntax:
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))
Parameters:
df: dataframe object
grpBy: column according to which grouping is to be done
示例: R 程序按组获取汇总统计信息
电阻
输出:
grpBy min q1 median mean q3 max
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