排除而不是使用tidyeval tidyr包括收集变量

时间:2017-08-17 20:30:18

标签: r tidyr tidyverse tidyeval

如果我想要排除某些列(DayMonthtidyr::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

知道如何以更严格的方式排除列吗?

注意:这是PowerMockito.mockStatic(Log.class); 0.7.0

1 个答案:

答案 0 :(得分:3)

由于gather()select()具有相同的语义,因此此问题与Remove columns the tidyeval way重复。

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

或者,您可以构造一个否定符号列表,并在gather()调用中拼接这些表达式。以下是如何创建符号并将其包装在-的调用中:

# 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)