【问题标题】:Is correct summarizing 2 times in a row in R?在 R 中连续总结 2 次是否正确?
【发布时间】:2021-03-17 16:31:04
【问题描述】:

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

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

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)
)

此时,我有一个这样的数据框(这些数字只是一个示例):

State Month Year n
X 1 2019 20
X 1 2020 15
Y 1 2019 45
Y 1 2020 54

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

data %>% group_by(state, month, year) %>% summarise(n = n()) %>% summarise(median = median(n))
State Month median
X 1 17.5
Y 1 49.5

我得到了我想要的结果,但我不知道 R 是否在背后制造一些我看不到的东西。

我的问题是:连续两次 'summarise()' 有什么不好?

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    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')
    

    【讨论】:

    • 谢谢伙计。那是我在想。但我现在有 1 个问题;为什么将 ``` .groups = 'drop' ``` 作为参数?这就像无关紧要,还是很重要?
    • @scalamardo 默认情况下它并不重要,它确实删除了该顺序的最后一个分组变量。但是,它也可能会根据 dplyr 版本打印警告消息。通过指定.groups,该警告将消失。
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多