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.frame:mtcars_df
tidyr::gather_(mtcars_df, "key", "val", -dplyr::contains("cyl"))
Run Code Online (Sandbox Code Playgroud)
如何使用标准评估以这种方式排除列?这里发生了什么?
根据 tidyr github 问题#109:gather_ 不再支持删除列?,
Gather_() 仅适用于字符向量。- 哈德利·威克姆,2015
你可以试试
library(dplyr)
mtcars_df %>% tidyr::gather_("key", "val", setdiff(names(.), "cyl"))
Run Code Online (Sandbox Code Playgroud)