首页 > 解决方案 > 在 R 中连续总结 2 次是否正确?

问题描述

我有一个关于人们死亡的州、月份和年份的数据。我需要计算每个月(跨年)死亡人数的中位数。

所以,第一步是按月和年计算死亡人数:

data %>% group_by(state, month, year) %>% summarise(n = n())
data.frame(
  stringsAsFactors = FALSE,
             State = c("X", "X", "Y", "Y"),
             Month = c(1L, 1L, 1L, 1L),
              Year = c(2019L, 2020L, 2019L, 2020L),
                 n = c(20L, 15L, 45L, 54L)
)

在这一点上,我有一个这样的数据框(这些数字只是一个例子):

状态 n
X 1 2019 20
X 1 2020 15
1 2019 45
1 2020 54

但我想计算中位数,所以我写

data %>% group_by(state, month, year) %>% summarise(n = n()) %>% summarise(median = median(n))
状态 中位数
X 1 17.5
1 49.5

我得到了我想要的结果,但我不知道 R 是否正在从后面做一些我看不到的东西。

我的问题是:连续两次“总结()”有什么不好?

标签: rdplyrtidyverse

解决方案


first总结之后,默认情况下最后一个分组被删除,即年份。因此,第二个总结基于“状态”和“月份”(如果这是 OP 的预期结果)。在这种情况下,两个summarise是有道理的。最好指定.groups选项以确保我们需要drop_last的即删除最后一个组,然后在第二个summarise中删除分组drop

library(dplyr)
data %>% 
  group_by(state, month, year) %>%
  summarise(n = n(), .groups = 'drop_last') %>%
  summarise(median = median(n), .groups = 'drop')

推荐阅读