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)のラウンドを(私は100 /合計(i)を* 2)カウント)'集計を意味ですか? " – Sotos
"週当たりのカウントシェアでは、次のように指定できます:df $ new < - (df、ave(count、name、FUN = function(i)(round(i * 100/sum(i)、2))))) dplyrを使用して週単位でグループ化し、列を追加するために突然変異させます。こんにちは、良い質問、あなたはあなたの誤植を修正することができます: 'data_frame'' 'ライブラリ(dplyr)'と 'df < - mutate(group_by(df、week)、round(count/sum(count)* 100,2))' –
'data.frame'の代わりに、データをコピー&ペーストする人々に適しています。 – snaut