首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总结一种方法,然后用另一种方法总结剩下的内容

总结一种方法,然后用另一种方法总结剩下的内容
EN

Stack Overflow用户
提问于 2020-06-11 00:41:13
回答 2查看 46关注 0票数 0

iris为例。在按Species分组之后,我想按其mean汇总Sepal.Length,然后按last汇总所有剩余的列;(不单独调用其余的列。)想要结果

代码语言:javascript
复制
# A tibble: 3 x 5
Species    Sepal.Length    Sepal.Width Petal.Length Petal.Width
<fct>             <dbl>          <dbl>        <dbl>       <dbl>
1 setosa           5.01            3.3          1.4         0.2
2 versicolor       5.94            2.8          4.1         1.3
3 virginica        6.59            3            5.1         1.8

运行时不会出现错误:

代码语言:javascript
复制
library(tidyverse)
iris %>% 
  as_tibble %>% 
  group_by(Species) %>% 
  summarise_all(~last(.))

但这不是:

代码语言:javascript
复制
iris %>% 
  as_tibble %>% 
  group_by(Species) %>% 
  summarise_all(Sepal.Length = mean(Sepal.Length), ~ last(.))

我尝试过使用everything()以及使用summarise_atsummarise_if,但是我还没有找到正确的语法来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-11 07:29:53

因为summarise_atsummarise_all将相同的函数映射到选定的变量,所以不能在这里使用它们。

以自动方式对不同列执行不同汇总的一种方法是使用引用和取消引用技术创建expression

代码语言:javascript
复制
library(dplyr)

cols = names(iris)[2:4]  # select remaining columns 
col_syms = syms(cols)  # create symbols from strings

summary_vars <- lapply(col_syms, function(col) {
  expr(last(!!col))  # expression that should be evaluated in summarise
})
names(summary_vars) = cols  # new column names (set old names)

iris %>%  
  group_by(Species) %>%
  summarise(Sepal.Length = mean(Sepal.Length), !!!summary_vars)  # open expressions

您可以通过将dplyr的管道包装到rlang::qq_show()中来查看要计算的内容

票数 1
EN

Stack Overflow用户

发布于 2020-06-11 01:55:13

做这份工作,并没有发现更优雅:

代码语言:javascript
复制
inner_join(iris %>% 
              select(Species,Sepal.Length) %>%
              group_by(Species) %>% 
              summarise_all(list(mean)),
           iris %>% 
              select(-Sepal.Length) %>%
              group_by(Species) %>% 
              summarise_all(list(last)),
           by = "Species")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62308729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档