在R语言中如何按组对行求和?合并相同物料与日期的行
合并相同物料与日期的行并对数量求和
需求:将数据集中**Item(物料)和Date(日期)**相同的行合并,对Quantity列的值求和,同时保留Description列(相同分组下该列值一致)。
原始数据集
library(tibble) df <- tibble::tribble( ~Item, ~Date, ~Description, ~Quantity, "Saw", "01/02/2020", "outdoor", 2L, "Saw", "01/02/2020", "outdoor", 3L, "Saw", "01/04/2020", "outdoor", 4L, "nails", "01/02/2020", "construction", 2L, "nails", "01/04/2020", "construction", 3L, "nails", "01/06/2020", "construction", 4L, "hammer", "01/01/2020", "home", 1L, "hammer", "01/01/2020", "home", 2L, "hammer", "01/01/2020", "home", 3L )
解决方案1:使用dplyr包
这是R中常用的tidyverse风格操作,通过分组后聚合实现:
library(dplyr) df_agg <- df %>% group_by(Item, Date, Description) %>% summarize(Quantity = sum(Quantity), .groups = "drop")
group_by(Item, Date, Description):按物料、日期、描述分组(相同物料+日期的描述一致,加入分组可直接保留该列)summarize(Quantity = sum(Quantity)):对每组的数量求和.groups = "drop":取消分组状态,返回普通数据框
解决方案2:使用data.table包
如果处理大数据集,data.table的运行效率更高:
library(data.table) setDT(df) df_agg <- df[, .(Quantity = sum(Quantity)), by = .(Item, Date, Description)]
最终结果
运行上述任意代码后,得到的结果与期望一致:
tibble::tribble( ~Item, ~Date, ~Description, ~Quantity, "Saw", "01/02/2020", "outdoor", 5L, "Saw", "01/04/2020", "outdoor", 4L, "nails", "01/02/2020", "construction", 2L, "nails", "01/04/2020", "construction", 3L, "nails", "01/06/2020", "construction", 4L, "hammer", "01/01/2020", "home", 6L )
内容的提问来源于stack exchange,提问作者kaza
相关产品推荐
相关产品推荐

