R语言DataFrame按Name、Fruit匹配合并行并累加Cost值的实现方法
R DataFrame 按多列匹配累加值的高效实现方法
你的需求本质是按Name、Fruit两列分组,对Cost列执行求和聚合,完全不需要手写for循环,以下是三种常用实现方案:
方案1:dplyr实现(易读性高,常规场景首选)
# 未安装包先运行 install.packages("dplyr") library(dplyr) result <- df %>% group_by(Name, Fruit) %>% summarise(Cost = sum(Cost), .groups = "drop")
summarise会自动合并同分组的多行数据,.groups = "drop"用于取消结果的分组属性,避免后续操作出现异常。
方案2:Base R实现(无第三方包依赖)
用R内置的aggregate函数即可完成,不需要额外安装任何包:
# 默认输出按分组字段排序 result <- aggregate(Cost ~ Name + Fruit, data = df, FUN = sum) # 加sort参数可保持原数据的行顺序 result <- aggregate(Cost ~ Name + Fruit, data = df, FUN = sum, sort = FALSE)
方案3:data.table实现(性能最优,适合大数据量)
如果数据量在十万行以上,推荐用data.table实现,运算效率远高于前两种方案:
# 未安装包先运行 install.packages("data.table") library(data.table) # 将data.frame转为data.table格式 setDT(df) # 按两列分组求和 result <- df[, .(Cost = sum(Cost)), by = .(Name, Fruit)]
内容的提问来源于stack exchange,提问作者EricW
相关产品推荐
相关产品推荐

