我正在尝试使用标准评估从tidyr包中排除gather()
中的列。
使用非标准评估,这很好用:
mtcars_df <- head(mtcars[, c("mpg", "hp", "cyl")])
tidyr::gather(mtcars_df, key, val, -cyl)
但是,使用标准评估时,以下两项工作都不会返回错误:
tidyr::gather_(mtcars_df, "key", "val", -"cyl")
tidyr::gather_(mtcars_df, "key", "val", -cyl)
作为一种解决方法,我尝试使用select()
辅助函数contains()
,但这只返回原始data.frame
,mtcars_df
:
tidyr::gather_(mtcars_df, "key", "val", -dplyr::contains("cyl"))
如何使用标准评估以这种方式排除列?这是怎么回事?
答案 0 :(得分:4)
根据tidyr github问题#109: gather_ no longer supports dropping a column?,
gather_()仅适用于字符向量。 - 哈德利威克姆,2015年
你可以尝试
{
"instructions": [
{
"A": 1
, "B": 3,
"move":
"moveonto"
},
{
"A": 5,
"B": 9,
"move": "pileover"
}
],
"length": 22,
"res": ""
}
答案 1 :(得分:1)
尽管您的解决方法有效,但在包中使用时会创建NOTE
:
no visible binding for global variable '.'
这阻止了它在CRAN上发布:(
有没有其他方法可以使用标准评估排除gather_
列?
我尝试过很多事情(例如使用dplyr::select_vars
),但没有任何效果......