2016-10-20 124 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

相關問題