使用标准评估从 tidyr 包中排除 Gather() 中的列

Jos*_*erg 5 r tidyr

gather()我正在尝试使用标准评估从 tidyr 包中排除一列。

使用非标准评估,效果很好:

mtcars_df <- head(mtcars[, c("mpg", "hp", "cyl")])
tidyr::gather(mtcars_df, key, val, -cyl)
Run Code Online (Sandbox Code Playgroud)

但是,使用标准评估时,以下两项都不起作用,并且都返回错误:

tidyr::gather_(mtcars_df, "key", "val", -"cyl")
tidyr::gather_(mtcars_df, "key", "val", -cyl)
Run Code Online (Sandbox Code Playgroud)

作为解决方法,我尝试使用select()辅助函数contains(),但这只是返回原始的data.framemtcars_df

tidyr::gather_(mtcars_df, "key", "val", -dplyr::contains("cyl"))
Run Code Online (Sandbox Code Playgroud)

如何使用标准评估以这种方式排除列?这里发生了什么?

csi*_*siu 4

根据 tidyr github 问题#109:gather_ 不再支持删除列?,

Gather_() 仅适用于字符向量。- 哈德利·威克姆,2015

你可以试试

library(dplyr)
mtcars_df %>% tidyr::gather_("key", "val", setdiff(names(.), "cyl"))
Run Code Online (Sandbox Code Playgroud)