代码之家  ›  专栏  ›  技术社区  ›  boshek

使用tidyeval tidyr[duplicate]排除而不是包括gather变量

  •  3
  • boshek  · 技术社区  · 7 年前

    如果我想排除一些列( Ozone , Day , Month

    tidyr::gather(airquality, key, value, -Ozone, -Day, -Month)

    但在函数中,我不清楚如何做到这一点。这似乎很笨拙,尽管它可以工作:

    my_gather <- function(col_to_compare) {
      gather_cols = dplyr::setdiff(c("Ozone", "Solar.R","Wind","Temp"), col_to_compare)
      tidyr::gather(airquality, key, value, !! rlang::enquo(gather_cols))
    }
    
    my_gather("Ozone")
    

    注意:这是与 tidyr 0.7.0

    1 回复  |  直到 7 年前
        1
  •  3
  •   Lionel Henry    7 年前

    自从 gather() 具有与相同的语义 select() Remove columns the tidyeval way

    您可以使用 -one_of(vars) 这是推荐的方法。

    聚集() 呼叫下面是如何创建符号并将其包装在调用中 - :

    # This creates a list of symbols
    syms <- syms(vars)
    
    # This creates a list of calls:
    exprs <- map(syms, function(sym) lang("-", sym))
    

    df %>% gather(key, value, !!! exprs)