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

时间:2017-02-16 21:28:04

标签: r tidyr

我正在尝试使用标准评估从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.framemtcars_df

tidyr::gather_(mtcars_df, "key", "val", -dplyr::contains("cyl"))

如何使用标准评估以这种方式排除列?这是怎么回事?

2 个答案:

答案 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),但没有任何效果......