如何使用带有“无效”名称的dplyr SE(即包含空格)?

时间:2015-06-11 18:51:17

标签: r dplyr

我无法弄清楚如何使用无效变量名称的SE dplyr函数,例如选择一个带有空格的变量。

示例:

df <- dplyr::data_frame(`a b` = 1)
myvar <- "a b"

如果我想选择a b变量,我可以使用dplyr::select(df, `a b`)执行此操作,但如何使用select_执行此操作?

我想我只需要在反引号中找到一个“包装”字符串的函数,这样我就可以调用dplyr::select_(df, backtick(myvar))

2 个答案:

答案 0 :(得分:8)

正如MyFlick在评论中所说的那样,通常应该避免这种行为,但是如果你想让它工作,你可以制作自己的反引号包装

backtick <- function(x) paste0("`", x, "`")
dplyr::select_(df, backtick(myvar))

编辑:Hadley回复了我关于此的推文,并向我展示仅仅使用as.name将对此有效,而不是使用反引号:

df <- dplyr::data_frame(`a b` = 1)
myvar <- "a b"
dplyr::select_(df, as.name(myvar))

答案 1 :(得分:2)

我的解决方案是利用select使用列位置的功能。 as.name解决方案似乎不适用于我的某些专栏。

select(df, which(names(df) %in% myvar))

如果已经在管道中,甚至更简洁:

df %>%
 select(which(names(.) %in% myvar))

虽然这使用了select,但在我看来它并不依赖于NSE。

请注意,如果没有匹配项,则会删除所有列,不会出现错误或警告。