2016-02-19 65 views
3

我試圖將一個字符串變量傳遞給一個函數,用作一些數據更改後的列名稱。將函數的字符串參數作爲數據幀列名傳遞給函數dplyr

下面是函數:

cleandata <- function(df,name){ 
    df <- df %>% 
    gather(key = 'Year',value = name,X1960:X2015) 
    df <- df %>% 
    select(-c(X,Indicator.Name,Indicator.Code)) 
    df$Year <- substr(df$Year,start = 2,stop = 5) 
    df$Year <- as.factor(df$Year) 
    return(df) 
} 

我想傳遞一個字符串變量爲「名」,並將它作爲列名。

功能的電流輸出爲:

> cleandata(lifeexp,'LifeExp') 
Source: local data frame [13,888 x 4] 

      Country.Name Country.Code Year  name 
       (fctr)  (fctr) (fctr) (dbl) 
1     Aruba   ABW 1960 65.56937 
2    Andorra   AND 1960  NA 
3   Afghanistan   AFG 1960 32.32851 
4    Angola   AGO 1960 32.98483 
5    Albania   ALB 1960 62.25437 
6   Arab World   ARB 1960 46.84706 
7 United Arab Emirates   ARE 1960 52.24322 
8    Argentina   ARG 1960 65.21554 
9    Armenia   ARM 1960 65.86346 
10  American Samoa   ASM 1960  NA 
..     ...   ... ...  ... 
> 

的最後一欄應該是 'LifeExp',而不是。我錯過了什麼?

由於提前,

拉胡爾

回答

3

您想在這裏使用gather_。有關解釋的原因,請參閱vignette('nse')

year_cols <- names(df)[grepl('^X\\d{4}$', names(df))] 
df %>% gather_('Year', name, year_cols) 

問題是gather需要一個不帶引號的名稱及其keyvalue列,所以你不能在變量名傳遞。它只是解釋你在那裏放置的變量名稱,作爲你想要的價值列的沒有引號的名字。這與以下原則相一致:不帶下劃線的功能用於交互式使用,當您的工作更具編程性時,應使用帶下劃線的功能。

+0

這是完美的!謝謝你,馬特。並向我展示如何有效地使用grepl。 (我喜歡上網) – Rahul

相關問題