如何对 tidyverse 中不同行的值求和?

How do I sum values from different rows in the tidyverse?

我有一个如下所示的数据框:

   WORD       CATEGORY             n
   <fct>       <fct>           <int>
 1 A            X                  4
 2 B            X                  3
 3 C            X                  6
 4 C            Y                  3
 5 D            X                  2
 6 E            X                  2
 7 F            Y                  2

我想添加一个列 sum,它根据 CATEGORY 将列 n 中的值加在一起。因此,例如,在第 3 行和第 4 行中,sum 列的值将为 9.

完整数据集如下所示:

   WORD       CATEGORY             n  sum
   <fct>       <fct>           <int>  <int>
 1 A            X                  4  4
 2 B            X                  3  3
 3 C            X                  6  9 
 4 C            Y                  3  9
 5 D            X                  2  2 
 6 E            X                  2  2
 7 F            Y                  2  2

如何在 tidyverse 中执行此操作?

如果我们计算 CATEGORY 中唯一值的数量并将其添加到分组变量中,我们可以直接对 n 求和:

dt %>%
 group_by(WORD) %>%
 mutate(uni=length(unique(CATEGORY))) %>%
 group_by(WORD,uni) %>%
 mutate(sum=sum(n)) %>%
 ungroup %>%
 select(-uni)
# A tibble: 7 x 4
  WORD  CATEGORY     n   sum
  <fct> <fct>    <int> <int>
1 A     X            4     4
2 B     X            3     3
3 C     X            6     9
4 C     Y            3     9
5 D     X            2     2
6 E     X            2     2
7 F     Y            2     2