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