📅  最后修改于: 2023-12-03 14:49:39.022000             🧑  作者: Mango
Dplyr 是一个用于数据处理的 R 包,提供了一些非常方便的函数,可以让我们在数据处理任务中更快地进行操作。其中,按函数分组也是一项非常常见的数据处理任务,本文将介绍在 Dplyr 中如何进行按函数分组。
首先,我们需要准备一份数据,来进行我们的演示操作。这里我们将使用 R 中的内置数据集 mtcars
:
library(dplyr)
# 加载数据
data("mtcars")
# 查看数据
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
我们可以看到,这份数据共有 11 列,包含汽车的各种信息,例如:每加仑的英里数(mpg
)、汽缸数(cyl
)等等。
接下来,我们将按某一函数对 mtcars
数据集进行分组操作。这里以最简单的按 cyl
列进行分组为例:
# 按 cyl 分组
grouped_data <- mtcars %>%
group_by(cyl)
# 查看分组后的数据
head(grouped_data, n = 12)
## # A tibble: 12 x 11
## # Groups: cyl [3]
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
## 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
## 8 24.4 4 146.7 62 3.69 3.19 20 1 0 4 2
## 9 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
## 10 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4
## 11 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4
## 12 16.4 8 275 180 3.07 4.07 17.4 0 0 3 3
可以看到,我们使用了 group_by
函数将 mtcars
按 cyl
列进行了分组,这里的 grouped_data
是一个所谓的“分组数据框”,它看起来与普通的数据框有些不同。接下来,我们可以对这个“分组数据框”进行各种操作,例如:筛选(filter
)、求和(summarize
)等等操作。
我们已经将 mtcars
按 cyl
列进行了分组,接下来,我们将进行一些简单的分组操作演示。
在筛选数据时,我们需要借助 filter
函数,然而,这个函数在我们已经进行了分组后,表现会有些不同:
# 筛选 cyl 列为 4 的数据
filtered_data <- grouped_data %>%
filter(cyl == 4)
# 查看筛选后的数据
head(filtered_data)
## # A tibble: 6 x 11
## # Groups: cyl [1]
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
## 2 24.4 4 146.7 62 3.69 3.19 20 1 0 4 2
## 3 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
## 4 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1
## 5 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2
## 6 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1
可以看到,我们使用了 filter
函数对 grouped_data
中 cyl
列为 4 的数据进行了筛选操作。和普通的筛选函数相比,这里的 filter
函数只对分组后的数据集的相应分组进行操作。也就是说,上面的 filtered_data
中仅包含 cyl
列为 4 的数据。
在对分组数据进行求和操作时,我们需要使用 summarize
函数,然而,这个函数在我们已经进行了分组后,表现也会有些不同:
# 对 cyl 列为 4 分组后,计算每组的 mpg 列平均值
summarized_data <- grouped_data %>%
filter(cyl == 4) %>%
summarize(avg_mpg = mean(mpg))
# 查看计算结果
summarized_data
## # A tibble: 1 x 2
## cyl avg_mpg
## <dbl> <dbl>
## 1 4 26.7
可以看到,我们使用了 summarize
函数对 cyl
列为 4 的数据进行了求和操作,这里的 avg_mpg
表示的是 mpg
列的平均值。和普通的求和函数相比,这里的 summarize
函数只对分组后的数据集的相应分组进行操作。也就是说,上面的 summarized_data
中仅包含 cyl
列为 4 的数据的 mpg
均值。
通过本文的介绍,我们学会了如何在 Dplyr 中按函数分组及进行分组操作。在实际的数据分析及处理中,这些操作将受益良多,希望大家掌握后多加练习。