R语言学习-Group By的实现

本文通过R语言中的dplyr包演示了如何对销售数据进行按年份分组,并计算每一年的记录数、月份的最大值与最小值、销售额的平均值及总和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

library(dplyr)
data <- data.frame(year = rep(2016:2017,6),month = seq(1:12),sales=rep(c(10,20,30,40),3))
   year month sales
1  2016     1    10
2  2017     2    20
3  2016     3    30
4  2017     4    40
5  2016     5    10
6  2017     6    20
7  2016     7    30
8  2017     8    40
9  2016     9    10
10 2017    10    20
11 2016    11    30
12 2017    12    40
planes <- group_by(data, year)
delay <- summarise(planes,
                   count = n(),                #个数
                   max_mon = max(month),       #最大值
                   min_mon = min(month),       #最小值
                   avg_sales = mean(sales),    #平均值
                   sum_sales = sum(sales))     #求和
# A tibble: 2 x 6
   year count max_mon min_mon avg_sales sum_sales
  <int> <int>   <dbl>   <dbl>     <dbl>     <dbl>
1  2016     6      11       1        20       120
2  2017     6      12       2        30       180

### ### `group_by` 函数的基本用法 在 R 语言中,`dplyr` 包提供了强大的数据操作功能,其中 `group_by` 函数用于对数据框(dataframe)进行分组操作。它通常与 `summarise`、`mutate` 等函数结合使用,以实现对分组数据的统计计算或变换操作[^1]。 基本语法如下: ```r group_by(data, grouping_variable) ``` 其中 `data` 是一个数据框,`grouping_variable` 是用于分组的一个或多个变量。例如,若有一个名为 `df` 的数据框,包含 `category` 和 `value` 两列,要根据 `category` 进行分组,可以使用以下代码: ```r library(dplyr) df %>% group_by(category) ``` ### ### 分组后进行统计计算 在对数据进行分组后,通常需要计算每个组的统计指标,如均值、标准差、样本数量等。此时可以结合 `summarise` 函数使用。例如,计算每个 `category` 组的均值和标准差: ```r df %>% group_by(category) %>% summarise(mean_value = mean(value), sd_value = sd(value)) ``` 该操作将返回一个新的数据框,其中每一行对应一个 `category` 值,并包含该组的均值和标准差[^2]。 ### ### 分组后进行数据变换 除了统计汇总外,`group_by` 还可用于数据变换操作,例如在每组内进行标准化或计算排序值。此时可以结合 `mutate` 函数使用。例如,计算每组的标准化值(z-score): ```r df %>% group_by(category) %>% mutate(z_score = (value - mean(value)) / sd(value)) ``` 此操作将新增一列 `z_score`,表示每个 `value` 在其组内的标准化值。 ### ### 多列分组 `group_by` 支持基于多个变量进行分组。例如,若数据框中包含 `category1` 和 `category2` 两列,可以按这两个变量的组合进行分组: ```r df %>% group_by(category1, category2) %>% summarise(mean_value = mean(value)) ``` 该查询将根据 `category1` 和 `category2` 的组合对数据进行分组,并计算每组的均值[^3]。 ### ### 结合 `percent_rank` 进行分组排序 在某些场景下,可能需要计算每组内数值的排序百分比。此时可以结合 `mutate` 和 `percent_rank` 函数使用。例如,计算每组内 `value` 的百分位排名: ```r df %>% group_by(category) %>% mutate(rank_percent = percent_rank(value)) ``` 该操作将新增一列 `rank_percent`,表示每个 `value` 在其组内的百分位排名,类似于 SQL 中的 `RANK() OVER (PARTITION BY ...)` 操作[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值