df = data.frame(week = as.factor(rep(c(1, 2), times = 5)),
name = as.factor(rep(LETTERS[1:5], times = 2)),
count = rpois(n = 10, lambda = 20))
> df
week name count
1 1 A 16
2 2 B 14
3 1 C 23
4 2 D 15
5 1 E 12
6 2 A 15
7 1 B 23
8 2 C 22
9 1 D 22
10 2 E 26
我想计算每周每个名字的计数份额。 起初我打算用下面的方法:如何计算一列中每个类别的份额?
transform(df, week1_share = ifelse(week == "1", round((df$count/sum(df$count) * 100),2), NA))
transform(df, week2_share = ifelse(week == "2", round((df$count/sum(df$count) * 100),2), NA))
但随后使每一列合并,最终把它作为对条形图标签,显得效率太低。必须有一些类型的快速解决方案,目前我还不知道。
基本上我想要做的是如下,但添加可能已经计算的份额%,如上所述匹配在每个框中。
ggplot(df, aes(reorder(week, -count),count, color = "white", group = name, fill = name))+
geom_bar(position = "stack", stat = "identity") +
scale_y_continuous(labels=comma)+
ggthemes::scale_color_tableau()
我不知道为什么重新排序功能往往不能在我身上。如果您有任何提示以desc分类订单,请分享。
你的意思'骨料(计数〜名,DF功能(I)圆(I * 100 /总和(I),2))'? (df,ave(count,name,FUN = function(i)(round(i * 100/sum(i),2))))' – Sotos
对于每周的计数份额,您可以使用dplyr按周分组,并改变以添加列。 '库(dplyr)'和'df < - mutate(group_by(df,week),round(count/sum(count)* 100,2))' –
嗨,好问题,你能解决你的错误:'data_frame'而不是'data.frame',用于复制粘贴数据的人员。 – snaut