【发布时间】:2021-03-03 17:48:03
【问题描述】:
我有一个如下的数据框:
df <- data.frame(group1=c("A","A","A","A","B","B","B","B"),
group2 = c("X", "X", "Y", "Y","X", "X", "Y", "Y"),
type = c("a", "b", "c","d","e","f","g","h"),
count = c(1,2,3,4,5,6,7,8))
> df
group1 group2 type count
1 A X a 1
2 A X b 2
3 A Y c 3
4 A Y d 4
5 B X e 5
6 B X f 6
7 B Y g 7
8 B Y h 8
我想将按group1 和group2 分组的每种类型的相对频率放入一列。我有办法做到这一点,但它很笨拙,需要总结然后加入。我觉得必须有一种方法可以在一个 dplyr 声明中做到这一点。但我想不通的是,在总结之后,我需要回到所有行。
我的笨方法:
df.summ <- df %>% group_by(group1, group2) %>%
summarize(tot = sum(count))
df <- left_join(df, df.summ)
df <- df %>% mutate(freq = count/tot)
> df
group1 group2 type count tot freq
1 A X a 1 3 0.3333333
2 A X b 2 3 0.6666667
3 A Y c 3 7 0.4285714
4 A Y d 4 7 0.5714286
5 B X e 5 11 0.4545455
6 B X f 6 11 0.5454545
7 B Y g 7 15 0.4666667
8 B Y h 8 15 0.5333333
【问题讨论】: