私はこのようなデータセットを持っています:
df = data.frame(group = c(rep('A',4), rep('B',3)),
subgroup = c('a', 'b', 'c', 'd', 'a', 'b', 'c'),
value = c(1,4,2,1,1,2,3))
group | subgroup | value
------------------------
A | a | 1
A | b | 4
A | c | 2
A | d | 1
B | a | 1
B | b | 2
B | c | 3
私が欲しいのは、各グループ内の各サブグループの値の割合を取得することです。つまり、出力は次のようになります。
group | subgroup | percent
------------------------
A | a | 0.125
A | b | 0.500
A | c | 0.250
A | d | 0.125
B | a | 0.167
B | b | 0.333
B | c | 0.500
グループA、サブグループAの例:値は1、グループA全体の合計は8(a = 1、b = 4、c = 2、d = 1)-したがって1/8 = 0.125
これまでのところ、thisのようなかなり単純な集計のみを見つけましたが、「除算」の方法を理解できませんサブグループ内の合計」の部分。
コメントごとに、サブグループが一意の場合は、次のことができます
library(dplyr)
group_by(df, group) %>% mutate(percent = value/sum(value))
# group subgroup value percent
# 1 A a 1 0.1250000
# 2 A b 4 0.5000000
# 3 A c 2 0.2500000
# 4 A d 1 0.1250000
# 5 B a 1 0.1666667
# 6 B b 2 0.3333333
# 7 B c 3 0.5000000
または、value
列を削除し、percent
列を同時に追加するには、transmute
を使用します
group_by(df, group) %>% transmute(subgroup, percent = value/sum(value))
# group subgroup percent
# 1 A a 0.1250000
# 2 A b 0.5000000
# 3 A c 0.2500000
# 4 A d 0.1250000
# 5 B a 0.1666667
# 6 B b 0.3333333
# 7 B c 0.5000000