2016-10-20 85 views
1

如何在没有反向字符的情况下编写select的参数?我想这样做,以便我可以从一个变量传递这个参数作为字符串。使用dplyr避免反引号字符

df <- dat[["__Table"]] %>% select(`__ID`) %>% mutate(fk_table = "__Table", val = 1) 

更改的选择"__ID"的说法给出了这样的错误:

Error: All select() inputs must resolve to integer column positions. 
The following do not: 
* "__ID" 

不幸的是,无法避免在列名_人物,因为数据是从通过ODBC关系数据库(的FileMaker)下载并且需要在保留列名的同时写回数据库。

理想情况下,我想能够做到以下几点:

colName <- "__ID"  
df <- dat[["__Table"]] %>% select(colName) %>% mutate(fk_table = "__Table", val = 1) 

我也试过eval(parse())

df <- dat[["__Table"]] %>% select(eval(parse(text="__ID"))) %>% mutate(fk_table = "__Table", val = 1) 

它抛出这个错误:

Error in parse(text = "__ID") : <text>:1:1: unexpected input 
1: _ 
    ^

顺便说一句,下面的工作,但是我回到了第一个(仍然带有倒勾符号)。

eval(parse(text="`__ID`") 

参考有关反引号字符R

+0

你应该看看使用'select _()'(和'dplyr'函数的其他下划线版本)。 – hrbrmstr

+0

这是不是这个重复 - http://stackoverflow.com/questions/24569154? – zx8754

回答

3

您可以使用as.name()select_()

colName <- "__ID" 
df <- data.frame(`__ID` = c(1,2,3), `123` = c(4,5,6), check.names = FALSE) 
select_(df, as.name(colName)) 
+0

OP想要传递变量,而不是使用字符串。 – hrbrmstr

+0

@hrbrmstr嗯,这应该适用于'var < - “__ID”; select_(df,as.name(var))'也是,不是? –

+1

@StevenBeaupré谢谢,这正是我所需要的。我对你的答案做了一个小的修改,所以它使用一个变量来保存列名,但这只是一个微不足道的变化。感谢你让我知道'as.name()' – Bobby

相关问题