You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R中按求和值整理数据集:高效聚合Brand与Candy列

高效分组求和解决方案(针对大型数据集)

嘿,针对你需要按BrandCandy的唯一组合对time求和的需求,我推荐两个适合处理大型数据集的高效工具:data.tabledplyr(tidyverse生态的一部分),它们的性能远优于基础R的aggregate函数,尤其数据量很大的时候。

方案一:使用data.table(速度最优)

data.table是专门为大数据处理设计的包,操作语法简洁且执行效率极高。

  1. 先安装并加载包(如果还没装的话):
# 安装包(仅第一次需要)
install.packages("data.table")
# 加载包
library(data.table)
  1. 将你的数据转换为data.table格式并执行分组求和:
# 把PlanetData转换为data.table
setDT(PlanetData)
# 按Brand和Candy分组,对time求和,结果列命名为total_time
summed_data <- PlanetData[, .(total_time = sum(time)), by = .(Brand, Candy)]

方案二:使用dplyr(语法更直观,适合tidyverse用户)

如果你习惯tidyverse的语法风格,dplyr的分组操作同样高效,且可读性强。

  1. 安装并加载包:
# 安装tidyverse(包含dplyr,仅第一次需要)
install.packages("tidyverse")
# 加载dplyr
library(dplyr)
  1. 执行分组求和:
summed_data <- PlanetData %>%
  group_by(Brand, Candy) %>%
  summarise(total_time = sum(time), .groups = "drop")

这里的.groups = "drop"是为了在分组计算后取消分组状态,避免后续操作的潜在问题;如果需要保留分组,可以去掉这个参数。

补充:基础R的方法(不推荐用于大型数据集)

如果暂时不想加载额外包,基础R的aggregate也能实现,但数据量很大时速度会慢很多:

summed_data <- aggregate(time ~ Brand + Candy, data = PlanetData, FUN = sum)

另外,不管用哪种方法,最终的summed_data都会是你想要的结果——每个Brand+Candy组合只出现一次,对应time的总和。

内容的提问来源于stack exchange,提问作者Robert J

火山引擎 最新活动