gpt4 book ai didi

r - 带变量列表的聚合函数

转载 作者:行者123 更新时间:2023-12-04 09:28:45 27 4
gpt4 key购买 nike

我正在尝试创建一个 R 脚本来汇总数据框中的度量。我希望它对数据框结构的变化做出动态 react 。例如,我有以下块。

library(plyr) #loading plyr just to access baseball data frame
MyData <- baseball[,cbind("id","h")]
AggHits <- aggregate(x=MyData$h, by=list(MyData[,"id"]), FUN=sum)

此块创建一个数据框 (AggHits),其中包含每个玩家 (id) 的总点击次数 (h)。好极了。

假设我想带入团队。如何更改 by 参数,以便 AggHits 具有“id”和“team”的每个组合的总点击次数?我尝试了以下操作,第二行抛出错误:参数必须具有相同的长度
MyData <- baseball[,cbind("id","team","h")]
AggHits <- aggregate(x=MyData$h, by=list(MyData[,cbind("id","team")]), FUN=sum)

更一般地说,我想编写第二行,以便它自动按除 h 之外的所有变量聚合 h。我可以很容易地使用 setdiff 生成要分组的变量列表。
# set the list of variables to summarize by as everything except hits
SumOver <- setdiff(colnames(MyData),"h")

# total up all the hits - again this line throws an error
AggHits <- aggregate(x=MyData$h, by=list(MyData[,cbind(SumOver)]), FUN=sum)

我使用它的业务目的涉及一个 csv 文件,它有一个度量 ($),目前有大约六个维度(产品、客户、州代码、日期等)。我希望能够向 csv 文件添加维度,而无需每次都编辑脚本。

我应该提一下,我已经能够使用 ddply 完成此操作,但我知道使用 ddply 来总结单个度量在运行时间方面是浪费的;聚合要快得多。

提前致谢!

答案(特定于相关示例)
块应该是
MyData <- baseball[,cbind("id","team","h")]
SumOver <- setdiff(colnames(MyData),"h")
AggHits <- aggregate(x=MyData$h, by=MyData[SumOver], FUN=sum)

最佳答案

这按每个非整数列(ID、Team、League)聚合,但更一般地显示了聚合任意列列表( by=MyData[cols.to.group.on] )的策略:

MyData <- plyr::baseball
cols <- names(MyData)[sapply(MyData, class) != "integer"]
aggregate(MyData$h, by=MyData[cols], sum)

关于r - 带变量列表的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com