学习R是我的业余爱好,用我的壁炉火柴
背景:使用dplyr获取:
todayhs %.%
group_by(hero, result) %.%
select(hero, opponent, result) %.%
summarise(
count = n())Data:
hero result count
Mage loss 12
Mage win 9
Rogue loss 3
Rogue win 1
Warrior loss 6
Warrior win 5 预期结果:特定英雄的百分比列
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将得到这个类的百分比的结果,但是有办法一次得到所有的数据吗?
我的尝试
transform(todayhs.mage, percents = ifelse(hero == "Mage",
prop.table(todayhs.mage$count[1:2]),"")) 给我
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(英雄,计数)?我在这里挠我的头。
发布于 2014-07-16 07:55:18
你可以试试:
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%发布于 2014-07-16 08:47:19
或者使用data.table (您没有说它必须是dplyr解决方案)
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%https://stackoverflow.com/questions/24774721
复制相似问题