我无法弄清楚如何使用无效变量名称的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))
答案 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。
请注意,如果没有匹配项,则会删除所有列,不会出现错误或警告。