我想创建一个函数,其中create_df
的第一个输入使用tidyeval变成数字1。在这里,它应该只是cyl
列。
如何提取...
的第一个“输入”?
library(dplyr, quietly = T)
create_df <- function(...){
var <- enquos(...)
first <- as_label(quos(...))
mtcars %>%
group_by(!!!var) %>%
summarise(mean = mean(mpg)) %>%
mutate(!!first := 1)
}
create_df(cyl, am)
#> `summarise()` regrouping output by 'cyl' (override with `.groups` argument)
#> # A tibble: 6 x 4
#> # Groups: cyl [3]
#> cyl am mean `<quos>`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 4 0 22.9 1
#> 2 4 1 28.1 1
#> 3 6 0 19.1 1
#> 4 6 1 20.6 1
#> 5 8 0 15.0 1
#> 6 8 1 15.4 1
由reprex package(v0.3.0)于2020-07-01创建
答案 0 :(得分:3)
您只需从vars
中取出第一个元素就可以从点中拉出第一个变量(感谢莱昂内尔·亨利(Lionel Henry)指出了这一点)。
create_df <- function(...){
var <- enquos(...)
first <- as_label(var[[1]])
mtcars %>%
group_by(!!!var) %>%
summarise(mean = mean(mpg)) %>%
mutate(!!first := 1)
}
create_df(cyl, am)
#> `summarise()` regrouping output by 'cyl' (override with `.groups` argument)
#> # A tibble: 6 x 3
#> # Groups: cyl [1]
#> cyl am mean
#> <dbl> <dbl> <dbl>
#> 1 1 0 22.9
#> 2 1 1 28.1
#> 3 1 0 19.1
#> 4 1 1 20.6
#> 5 1 0 15.0
#> 6 1 1 15.4