我正在尝试将字符串变量传递给函数,以便在进行某些数据更改后用作列名。
这是功能:
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)
}
我想将字符串变量传递给'name',并将其作为列名称。
该功能的当前输出是:
> 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',而不是 name 。我错过了什么?
提前致谢,
的Rahul
答案 0 :(得分:3)
您想在此处使用gather_
。有关原因,请参阅vignette('nse')
。
year_cols <- names(df)[grepl('^X\\d{4}$', names(df))]
df %>% gather_('Year', name, year_cols)
问题是gather
对其key
和value
列采用了不带引号的名称,因此您无法传递变量名称。它只是将您放在那里的变量名称解释为您想要的值列的不带引号的名称。这与以下原则一致:没有下划线的 tidyr 函数用于交互式使用,当您的工作更具编程性时,应使用带下划线的函数。