tidyr :: gather-在省略号上操作

时间:2019-03-05 13:32:09

标签: r dplyr tidyr

下面的代码是我的初衷。

gather_df <- function (...) {
  mtcars %>% 
    group_by(...) %>% 
    tidyr::gather(key, value, -vs)
}

gather_df(vs)

为进一步概括,是否可以对省略号进行操作?

gather_df <- function (...) {
  mtcars %>% 
    group_by(...) %>% 
    tidyr::gather(key, value, -...)
}

gather_df(vs)

3 个答案:

答案 0 :(得分:2)

我们可以使用enquos捕获所有输入,然后使用!!!进行评估

library(dplyr)
gather_df <- function (...) {
  vars<-enquos(...)
  mtcars %>% 
    group_by(!!!vars) %>% 
    tidyr::gather(key, value, -c(!!!vars))
}

gather_df(vs)
gather_df(vs,cyl)
gather_df(vs,cyl,hp)

PS:我正在使用rlang 0.3.1

答案 1 :(得分:0)

我使用quo()而不是enquos()来保持rlang 0.1.2兼容性。

gather_df <- function (...) {
  vars <- quo(...)
  mtcars %>% 
    group_by(!!!vars) %>% 
    tidyr::gather(key, value, -c(!!!vars))
}

gather_df(vs)

答案 2 :(得分:0)

作为字符的替代参数(rlang> 0.1.2)。

gather_df <- function (...) {
  grp_var <- rlang::sym(...)
  mtcars %>% 
    group_by(!!!grp_var) %>% 
    gather(key, value, -!!(grp_var))
}

gather_df("vs")