按多个因子级别计算多列和聚合值
发布时间:2020-12-14 04:48:49 所属栏目:百科 来源:网络整理
导读:我的数据如下: df - data.frame(Price=seq(1,1.5,0.1),Sales=seq(6,1,-1),Quality=c('A','A','B','B'),Brand=c('F','P','F','F')) 有时我需要对多个列进行一些复杂的计算,并按多个因子级别聚合值.举一个简单的例子,如果我想在每个质量中获得收入(=价格*销售
我的数据如下:
df <- data.frame(Price=seq(1,1.5,0.1),Sales=seq(6,1,-1),Quality=c('A','A','B','B'),Brand=c('F','P','F','F')) 有时我需要对多个列进行一些复杂的计算,并按多个因子级别聚合值.举一个简单的例子,如果我想在每个质量中获得收入(=价格*销售)分布并按品牌划分,我会这样做 df$Revenue <- df$Price*df$Sales RevSumByQ <- aggregate(Revenue~Quality,data=df,sum) colnames(RevSumByQ)[2] <- "RevSumByQ" df <- merge(df,RevSumByQ) RevSumWithinQByB <- aggregate(RevSumByQ~Brand,sum) colnames(RevSumWithinQByB)[2] <- "RevSumWithinQByB" df <- merge(df,RevSumWithinQByB) df$RevDistWithinQByB = df$RevSumByQ/df$RevSumWithinQByB df Brand Quality Price Sales Revenue RevSumByQ RevSumWithinQByB RevDistWithinQByB 1 F A 1.0 6 6.0 16.3 32.7 0.4984709 2 F B 1.4 2 2.8 8.2 32.7 0.2507645 3 F B 1.5 1 1.5 8.2 32.7 0.2507645 4 P A 1.1 5 5.5 16.3 40.8 0.3995098 5 P A 1.2 4 4.8 16.3 40.8 0.3995098 6 P B 1.3 3 3.9 8.2 40.8 0.2009804 如果在情节中显示: require(ggplot2) ggplot(data=df,aes(x=Brand,y=RevDistWithinQByB,fill=Quality)) + geom_bar(stat='identity') 应该有更好的方法来绘制这个图,但我的主要兴趣是获得具有较少中间结果的数据框(Revenue,RevSumByQ,RevSumWithinQByB).我可以在我的方法中看到一个结构,所以我想知道是否有更优雅的解决方案,或者已经有一些功能可以促进这种任务. 解决方法
你可以试试dplyr
res <- df %>% group_by(Quality) %>% mutate(Revenue= Price*Sales,RevSumByQ=sum(Revenue)) %>% group_by(Brand) %>% mutate(RevSumWithinQByB= sum(RevSumByQ),RevDistWithinQByB= RevSumByQ/RevSumWithinQByB ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- cocos2dx 3.3 tilemap 缩放滑动并且准确点击对象
- C++事件处理中__event与__raise关键字的用法讲解
- 文本处理三剑客之grep(包括常用正则表达式)
- JSON.stringify 语法实例讲解
- ruby-on-rails-3 – Rails3:如何将参数传递给自定义的will
- xml – 如何使用带有Xinclude的xpointer来引用元素
- cocos2d-x3.2在mac os下打包android系统apk
- cocos2dx 使用 crypto++
- ruby-on-rails – Bundler无法继续;解析’Gemfile’时出错:
- c# – 每个WCF服务的新ServiceHost?