【问题标题】:How to glue a function argument to .names in dplyr's across function?如何将函数参数粘合到 dplyr 的跨函数中的 .names?
【发布时间】:2020-11-18 22:45:31
【问题描述】:

我正在尝试使用 {col} 和其中的一个函数参数来命名 across 函数的输出

library(tidyverse)

mean_by <- function(data, by, var, prefix = "avg") {
  data %>% 
    group_by({{ by }}) %>% 
    summarise(across({{ var }}, mean, .names = "{prefix}_{col}"))
}

但是,在iris %&gt;% mean_by(Species, Sepal.Width) 上进行测试时,我收到无法找到对象“前缀”的错误。 .names 中的胶水语法对我来说看起来不错,所以我认为这是一个范围问题? .names 参数是否只能访问已传递给 across 的内容?

【问题讨论】:

  • 你能在github上发布一个功能请求吗?这可能是可行的。

标签: r tidyverse tidyeval


【解决方案1】:

我认为across 中的.names 只允许在across 中引用{col}{fn},但您可以尝试粘贴您的prefix

> library(tidyverse)
> mean_by <- function(data, by, var, prefix = "avg") {
  data %>% 
    group_by({{ by }}) %>% 
    summarise(across({{ var }}, mean, .names = paste0(prefix,"_{col}")))
 }
> iris %>% mean_by(Species, Sepal.Width)
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 3 x 2
  Species    avg_Sepal.Width
  <fct>                <dbl>
1 setosa                3.43
2 versicolor            2.77
3 virginica             2.97

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2021-08-05
    • 2022-12-21
    • 2011-11-24
    • 2020-11-15
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多