【问题标题】:R Dataframe: Combine rows / values when two other values match [duplicate]R Dataframe:当其他两个值匹配时合并行/值[重复]
【发布时间】:2021-12-23 10:44:51
【问题描述】:

我有一个如下所示的数据框:

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))

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

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

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

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    我们可能会使用

    library(data.table)
    setDT(df)[, .(Cost = sum(Cost)), .(Name, Fruit)]
    

    【讨论】:

      【解决方案2】:

      您要做的是在一个组内对Cost 求和。

      在基础 R 中:

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

      或者使用dplyr:

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

      【讨论】:

      • 聚合绝对有效,谢谢!你和阿克伦同时回答
      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2015-11-22
      • 2018-05-22
      相关资源
      最近更新 更多