r - dplyr 中的分组方式
问题描述
我从已发表的论文中找到了以下代码。在这种特定情况下,我会说该策略效果很好,因为它很清楚并且变量相对较少。但是,代码“有点”重复,我想知道是否有一种不那么重复的方式来做到这一点,这仍然符合dplyr
风格和生活方式。
一个测试用例:
set.seed(42)
df <- data.frame(GR=sample(1:2, 100, replace=TRUE),
as.data.frame(replicate(20, rnorm(100))))
names(df)[-1] <- LETTERS[1:20]
现在分组表使用aggregate
:
aggregate(df[,-1], df[1],mean)
...并与dplyr
:
df %>% group_by(GR) %>% summarize(mean.A=mean(A),
mean.B=mean(B),
mean.C=mean(C),
mean.D=mean(D),
mean.E=mean(E),
# skipped 14 rows
mean.T=mean(T))
有没有一种干燥的方式来做到这一点dplyr
?我知道 R 中的所有编程工具也都可用dplyr
- 所以问题不在于如何做到这一点......相反,我正在寻找一种惯用的dplyr
方式来做到这一点。我在现实生活中见过类似但更长的例子。
解决方案
当有多个列时summarise
,使用其中一个summarise_all
(如果所有其他列都需要使用除分组变量之外的函数进行汇总)
df %>%
group_by(GR) %>%
summarise_all(funs(mean = mean(., na.rm = TRUE)))
如果我们只需要在选定的列上执行此操作,请尝试使用summarise_at
df %>%
group_by(GR) %>%
summarise_at(vars(A, B, C, D, E), funs(mean = mean(., na.rm = TRUE)))
另外,检查summarise_if
我们何时只想在某些type
列上应用该函数
推荐阅读
- python - 在容器化的 lambda 函数中使用 lambda python 运行时时,Boto3 无法找到资源
- java - 尽管 findById 和 findByPKCOLUMN 返回相同的结果,但它们之间有什么区别?
- android - 在 Android Studio 中警告将新 ns 映射到旧 ns
- python - 在 python 中从 2 个不同大小的元组创建字典
- css - CSS @keyframes translate3d 兼容性
- python - 将数据从 Dataframe A 中的一行复制到 python/pandas 中 Dataframe B 中的特定行
- javascript - Javascript自动增量代码不起作用
- elasticsearch - 从独立迁移到 Elasticsearch 的集群实例
- python - Ropsten 网络中禁止 Etherscan API 请求 403
- go - go concurrency 串行打印