如何将 dplyr SE 与 "invalid" 名称(即包含空格)一起使用?
How to use dplyr SE with "invalid" names (ie containing spaces)?
我不知道如何使用带有无效变量名的 SE dplyr 函数,例如 selecting 一个带有 space 的变量。
示例:
df <- dplyr::data_frame(`a b` = 1)
myvar <- "a b"
如果我想 select a b
变量,我可以使用 dplyr::select(df, `a b`)
来实现,但是我如何使用 select_
来实现?
我想我只需要找到一个 "wraps" 反引号字符串的函数,这样我就可以调用 dplyr::select_(df, backtick(myvar))
正如 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))
我的解决方案是利用 select
的能力来使用列 positions。 as.name
解决方案似乎不适用于我的某些专栏。
select(df, which(names(df) %in% myvar))
如果已经在管道中,则更简洁:
df %>%
select(which(names(.) %in% myvar))
虽然这使用了select
,但在我看来它并不依赖于 NSE。
请注意,如果没有匹配项,所有列都将被删除,不会出现错误或警告。
我不知道如何使用带有无效变量名的 SE dplyr 函数,例如 selecting 一个带有 space 的变量。
示例:
df <- dplyr::data_frame(`a b` = 1)
myvar <- "a b"
如果我想 select a b
变量,我可以使用 dplyr::select(df, `a b`)
来实现,但是我如何使用 select_
来实现?
我想我只需要找到一个 "wraps" 反引号字符串的函数,这样我就可以调用 dplyr::select_(df, backtick(myvar))
正如 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))
我的解决方案是利用 select
的能力来使用列 positions。 as.name
解决方案似乎不适用于我的某些专栏。
select(df, which(names(df) %in% myvar))
如果已经在管道中,则更简洁:
df %>%
select(which(names(.) %in% myvar))
虽然这使用了select
,但在我看来它并不依赖于 NSE。
请注意,如果没有匹配项,所有列都将被删除,不会出现错误或警告。