r - 在 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 是否正在从后面做一些我看不到的东西。
我的问题是:连续两次“总结()”有什么不好?
解决方案
在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')
推荐阅读
- java - 使 @Transactional 和 @Rollback 与 Spring Boot Test 一起工作
- java - 类加载器加载不正确的 log4j.xml
- c# - 从文本中获取一行的一部分作为字符串
- ios - 使用详细视图中的按钮浏览masterTableView,但当值大于/小于intableview的行数时按钮消失
- javascript - 使用 javascript 在 Web 应用程序上阻止网站
- python-3.x - TypeError: 'int' 对象在计算均值时不可迭代
- php - 通过浏览器超链接从 Linux Apache Webserver 访问远程 Windows 服务器文件
- ruby-on-rails - 从控制台调用 rails lib 任务
- java - 线程串行而不是并行运行
- dynamics-crm - 如何在 MS Dynamics CRM 实例中使用站点地图编辑器启用区域?