r - dplyr group_by() 和 summarise() 在所选行之间的组内进行计算
问题描述
使用mpg
数据获取基本示例:
dat <- mpg %>%
select(manufacturer, year, displ) %>%
group_by(manufacturer, year) %>%
summarise(meandispl = mean(displ)) %>%
ungroup()
# A tibble: 30 x 3
# Groups: manufacturer [15]
manufacturer year meandispl
<chr> <int> <dbl>
1 audi 1999 2.36
2 audi 2008 2.73
3 chevrolet 1999 4.97
4 chevrolet 2008 5.12
5 dodge 1999 4.32
6 dodge 2008 4.42
7 ford 1999 4.45
8 ford 2008 4.66
9 honda 1999 1.6
10 honda 2008 1.85
有了这些数据,我想比较group_by
manufacturer
和不使用行号(例如with and of )summarize
meandispl
1999
2008
first
end
slice
到目前为止,只有一个汇总变量(但可以有多个),我想出了:
dat %>%
group_by(manufacturer) %>%
summarise(diff2008_1999 = meandispl[which(year == 2008)] - meandispl[which(year == 1999)])
但是,我觉得这不是一种整洁的方式。还有其他选项可以编写此代码吗?(不使用行号)。在那种情况下,我使用year
但它也可能是一个字符串(所以不min
,max
解决方案)
谢谢你。
解决方案
你可以使用diff
library(dplyr)
dat %>% group_by(manufacturer) %>% summarise(diff = diff(meandispl))
如果还有其他年份,我们可以filter
针对特定年份,arrange
然后再group_by
manufacturer
取diff
。
dat %>%
filter(year %in% c(1999, 2008)) %>%
arrange(manufacturer, year) %>%
group_by(manufacturer) %>%
summarise(diff = diff(meandispl))
推荐阅读
- python - 在 Visual Studio 中将 Python 嵌入到 C++ 中
- node.js - 如何使用 next.js 将动态 html 元素注入页面?
- ios - 如何使用 AWS API Gateway 生成的 iOS 开发工具包在 Swift 中访问 JSON 响应
- apache-kafka - 将一个 Confluent 控制中心连接到多个 Kafka 集群
- reactjs - 如何在反应中加载图像(找不到错误模块)?
- c# - 在 Unity3D 中不使用 IDropHandler 触发 Drop 事件
- powershell - 如何将多行字符串导出为单行文本
- css - 查看编译的 CSS 时如何删除知道 CSS 来自哪个文件?
- enums - 如何键入其键只能是枚举成员的哈希表?
- slurm - slurmd 无法与 slurmctld 通信