首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用dplyr计算相对频率百分比的一种更智能的方法?

用dplyr计算相对频率百分比的一种更智能的方法?
EN

Stack Overflow用户
提问于 2014-07-16 07:29:38
回答 2查看 282关注 0票数 2

学习R是我的业余爱好,用我的壁炉火柴

背景:使用dplyr获取:

代码语言:javascript
复制
todayhs %.%
   group_by(hero, result) %.%
   select(hero, opponent, result) %.%
   summarise(
     count = n())

Data

代码语言:javascript
复制
hero      result    count   
Mage      loss      12 
Mage      win       9 
Rogue     loss      3                  
Rogue     win       1                  
Warrior   loss      6                  
Warrior   win       5                  

预期结果:特定英雄的百分比列

代码语言:javascript
复制
hero      result    count   percent
Mage      loss      12      57%
Mage      win       9       43% 
Rogue     loss      3       75%           
Rogue     win       1       25%           
Warrior   loss      6       55%           
Warrior   win       5       45% 

我的障碍

我理解过滤器(英雄= "Mage")并使用prop.table将得到这个类的百分比的结果,但是有办法一次得到所有的数据吗?

我的尝试

代码语言:javascript
复制
 transform(todayhs.mage, percents = ifelse(hero == "Mage",    
 prop.table(todayhs.mage$count[1:2]),""))          

给我

代码语言:javascript
复制
 hero      result count      percents
 Mage      loss    12        0.571428571428571
 Mage      win     9         0.428571428571429
 Rogue     loss    3                  
 Rogue     win     1                  
 Warrior   loss    6                  
 Warrior    win    5      

我想我可以写一个函数,然后逐个把它们去掉。但这感觉不太对。也许有更好的方法使用dplyr添加一个group_by(英雄,计数)?我在这里挠我的头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-16 07:55:18

你可以试试:

代码语言:javascript
复制
todayhs <- read.table(text="hero      result    count   
Mage      loss      12 
Mage      win       9 
Rogue     loss      3                  
Rogue     win       1                  
Warrior   loss      6                  
Warrior   win       5",sep="",header=T,stringsAsFactors=F)    

 library(dplyr)
 todayhs%>%
 group_by(hero)%>%
 mutate(percent=paste0(round(100*count/sum(count)),"%"))
# Source: local data frame [6 x 4]
 #Groups: hero

 #     hero result count percent
 # 1    Mage   loss    12     57%
 # 2    Mage    win     9     43%
 # 3   Rogue   loss     3     75%
 # 4   Rogue    win     1     25%
 # 5 Warrior   loss     6     55%
 # 6 Warrior    win     5     45%
票数 3
EN

Stack Overflow用户

发布于 2014-07-16 08:47:19

或者使用data.table (您没有说它必须是dplyr解决方案)

代码语言:javascript
复制
library(data.table)
setDT(todayhs)[, Percent := paste0(round(count/sum(count)*100), "%"), by = hero]

#       hero result count Percent
# 1:    Mage   loss    12     57%
# 2:    Mage    win     9     43%
# 3:   Rogue   loss     3     75%
# 4:   Rogue    win     1     25%
# 5: Warrior   loss     6     55%
# 6: Warrior    win     5     45%
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24774721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档