R Dataframe:根据其他2个列匹配对未定义的num列求和

Posted

技术标签:

【中文标题】R Dataframe:根据其他2个列匹配对未定义的num列求和【英文标题】:R Dataframe: Sum undefined num columns based on 2 other column matches 【发布时间】:2022-01-23 03:15:14 【问题描述】:

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

Name  Fruit    CostA  CostB
Adam  Orange   2       5
Adam  Apple    3       6
Bob   Orange   3       5
Cathy Orange   4       3
Cathy Orange   5       7

数据框创建:

df=data.frame(Name=c("Adam","Adam","Bob","Cathy","Cathy"),Fruit=c("Orange","Apple","Orange","Orange","Orange"),CostA=c(2,3,3,4,5),CostB=c(7,8,9,3,4))

此数据框将增加未指定数量的 CostC、CostD 等列。当 Name 和 Fruit 值匹配时,我需要对所有列(CostA、CostB 等)进行求和/聚合。

当要求和的成本列已知时,我已经完成了类似的操作,方法是:

aggregate(cbind(CostA,CostB) ~ Name + Fruit, df, sum)

但是,我现在需要在不识别所有要求和的列的情况下完成。

【问题讨论】:

【参考方案1】:

如果只有这些列,请使用. 指定formula 中的其余列

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

如果还有其他列,并且希望仅包含“名称”、“水果”、subsetselect 选项之外的 cost

aggregate(.~ Name + Fruit, 
    subset(df, selct = c(Name, Fruit, startsWith(names(df), "Cost"))), sum)

【讨论】:

这似乎很有魅力。非常感谢!

以上是关于R Dataframe:根据其他2个列匹配对未定义的num列求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他几个列上添加一个权重列?

根据列表计算DataFrame中的匹配值

R语言dplyr包使用anti_join()函数返回在一个dataframe中存在而在另一个dataframe中没有匹配值的所有行实战

Python/Pandas:通过匹配的索引标准对 Dataframe 进行子集化

如何根据部分匹配选择 DataFrame 列?

C++17 编译器不应该发现对未定义值的传递引用吗?