首页 > 解决方案 > R Dataframe:当其他两个值匹配时组合行/值

问题描述

我有一个看起来像这样的数据框:

Name  Fruit Cost
Adam  Orange   2
Adam  Apple    3
Bob   Orange   3
Cathy Orange   4
Cathy Orange   5

数据框创建:

df=data.frame(Name=c("Adam","Adam","Bob","Cathy","Cathy"),Fruit=c("Orange","Apple","Orange","Orange","Orange"),Cost=c(2,3,3,4,5))

我想编写一个组合脚本,当名称和水果匹配时,添加成本并删除另一行。例如,结果将如下所示,因为名称和水果相同,所以合并了两个 Cathy 成本:

Name  Fruit Cost
Adam  Orange   2
Adam  Apple    3
Bob   Orange   3
Cathy Orange   9

我正在考虑编写一个 for 循环来逐行比较,逐个值,比较并添加然后删除。但我必须想象有一种更快/更清洁的方式。

标签: rdataframemerge

解决方案


你想要做的是Cost在一个组内求和。

在基础 R 中:

aggregate(Cost ~ Name + Fruit, df, sum)

或使用dplyr

library(dplyr)

df %>% 
  group_by(Name, Fruit) %>% 
  summarize(Cost = sum(Cost), .groups = "drop")

推荐阅读