R 求和使用 group_by、select 大和的组,然后使用不同的 group_by 重复求和

R sum using group_by, select groups with large sum, then repeat sum using different group_by

我有一个解决这个问题的有效方法,但我很好奇是否有比我更有效的方法来解决这个问题。

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

df <- data.frame("Factor1" = c(rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4)),
                 "Factor2" = c(rep(c(rep("a", 2), rep("b", 2)), 4)),
                 "Value" = c(c(1:4), c(21:24), c(11:14), c(41:44)))

我首先对每个Factor1求和所有Value,以确定哪个Factor1具有最大的Value,然后select最上面的n(本例中为 2)Value 的总和,如下所示:

df2 <- df %>% group_by(Factor1) %>%
           summarise(Factor1.sum = sum(Value)) %>%
           arrange(desc(Factor1.sum)) %>%
           top_n(n=2) %>% ungroup()

既然我确定了BD作为最大和Value的前两个Factor1,我想再次计算Value,但这次按 Factor1Factor2 分组,如下所示。

df3 <- subset(df, Factor1 %in% df2$Factor1) %>%
          group_by(Factor1, Factor2) %>%
          summarise(Factor2.sum = sum(Value))

这正是我想要的,但我需要创建额外的文件(df2df3),我想知道 dplyr 中是否有一些功能我不知道的软件包(或任何软件包)将使这个过程更简单?

这里是同一事物的更短变体,使用 count 作为 group_bysummarize 的快捷方式,并使用 left_join 获取第一步的结果作为第二部分的 Factor1 列表。

count(df, Factor1, wt = Value, sort = TRUE) %>% 
  slice(1:2) %>%
  left_join(count(df, Factor1, Factor2, wt = Value, name = "Factor2.sum"))


Joining, by = "Factor1"
  Factor1   n Factor2 Factor2.sum
1       D 170       a          83
2       D 170       b          87
3       B  90       a          43
4       B  90       b          47