This question already has answers here:
Remove columns the tidyeval way
(4 个回答)
3年前关闭。
如果我想排除一些“聚集”的列(
但是在一个函数中,我不清楚如何做到这一点。尽管它有效,但这似乎很笨拙:
知道如何以更严格的方式排除列吗?
注意:这是
然后,您可以使用 !!! 拼接调用列表:
(4 个回答)
3年前关闭。
如果我想排除一些“聚集”的列(
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 最佳答案
由于 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)
关于r - 使用 tidyeval tidyr 排除而不是包括收集变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45744466/
10-12 17:18