如何在R语言中按员工分组汇总数据框sold列并生成新数据框?
按员工姓氏汇总销售总量
我有一个名为df的数据框,结构如下(实际数据量更大):
txnID date product sold repID lastName 1001 8/5/2020 Clobromizen 600 203 Kappoorthy 1002 6/28/2020 Alaraphosol 276 887 da Silva 1003 6/28/2020 Alaraphosol 184 887 da Silva 1004 4/16/2020 Diaprogenix 36 887 da Silva 1005 6/14/2020 Diaprogenix 40 887 da Silva 1006 5/19/2020 Xinoprozen 5640 332 McRowe 1007 8/23/2020 Diaprogenix 60 332 McRowe 1008 11/14/2020 Clobromizen 2880 332 McRowe 1009 9/26/2020 Colophrazen 738 203 Kappoorthy 1010 2/5/2020 Diaprogenix 20 332 McRowe 1011 9/23/2020 Gerantrazeophem 3740 100 Schwab 1012 12/4/2020 Clobromizen 1584 221 Sixt
需要生成新数据框df1,汇总每位员工的所有产品销售总量,目标格式如下:
View(df1) lastName totalSold 1 Kappoorthy 1338 2 da Silva 536 3 McRowe 8600 4 Schwab 3740 5 Sixt 1584
解决方案
方法1:Base R 原生实现
使用aggregate()函数直接完成分组求和:
df1 <- aggregate(sold ~ lastName, data = df, FUN = sum)
该函数会自动按lastName分组,计算每组sold列的总和,返回结果即为所需的汇总数据框。
方法2:dplyr 包实现
如果偏好tidyverse风格代码,可使用dplyr完成分组汇总:
- 先安装并加载dplyr包(首次使用需执行安装):
install.packages("dplyr") library(dplyr)
- 执行分组求和:
df1 <- df %>% group_by(lastName) %>% summarise(totalSold = sum(sold)) %>% ungroup()
group_by(lastName)指定按姓氏分组summarise(totalSold = sum(sold))计算每组销售总量并命名为totalSoldungroup()可选,用于取消分组状态,避免后续操作受分组影响
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

