加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

具有变量列表的聚合函数

发布时间:2020-12-14 04:52:55 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个R脚本来汇总数据框中的度量.我希望它能动态地响应数据帧结构的变化.例如,我有以下块. library(plyr) #loading plyr just to access baseball data frameMyData - baseball[,cbind("id","h")]AggHits - aggregate(x=MyData$h,by=list(MyDat
我正在尝试创建一个R脚本来汇总数据框中的度量.我希望它能动态地响应数据帧结构的变化.例如,我有以下块.

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),其中包含每个玩家的总命中(h)(id).好极了.

假设我想引进团队.如何更改by参数,以便AggHits具有“id”和“team”的每个组合的总命中数?我尝试了以下内容,第二行抛出错误:参数必须具有相同的长度

MyData <- baseball[,"team","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,cbind(SumOver)]),FUN=sum)

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

我应该提一下,我已经能够使用ddply实现这一点,但我知道使用ddply来总结一个单一的措施对于运行时来说是浪费;聚合速度要快得多.

提前致谢!

答案(具体到相关示例)
块应该是

MyData <- baseball[,"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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读