dplyr 0.5.0使用列索引进行mutate

Kev*_*nes 4 r dplyr

我已经更新了dplyr(现在为0.7.1)并且我的许多旧代码都不起作用,因为mutate_each已被弃用.我用mutate_each使用列索引来做这样的事情(下面的代码).我会在数百列上做到这一点.我只是无法弄清楚如何使用mutate_at正确使用vars参数.我见过的所有例子都使用了列名...我不想这样做.我确信这是一个简单的答案,但我花了太多时间试图解决它,并非常感谢一些帮助.

data<-data.frame(numbers=1:10, morenumbers=11:20)
change<-function(x) ifelse(x>10, 1, 2)
newdata<-data%>%mutate_each(funs(change), 1:2)
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

newdata<-data%>%mutate_at(funs(change), vars(1:2))
Run Code Online (Sandbox Code Playgroud)

甚至这个:

newdata<-data%>%mutate_at(funs(change), vars(numbers, morenumbers))     
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Error: `.vars` must be a character/numeric vector or a `vars()` object, 
not list
Run Code Online (Sandbox Code Playgroud)

m0n*_*awk 7

新的原型mutate_at是:

mutate_at(.tbl, .vars, .funs, ..., .cols = NULL)
Run Code Online (Sandbox Code Playgroud)

请注意,这.vars是现在的第一个参数.因此,要么.vars明确指定,要么更改顺序.

newdata <- data %>% mutate_at(funs(change), .vars = vars(1:2))
# OR
newdata <- data %>% mutate_at(vars(1:2), funs(change))

   numbers morenumbers
1        2           1
2        2           1
3        2           1
4        2           1
5        2           1
6        2           1
7        2           1
8        2           1
9        2           1
10       2           1
Run Code Online (Sandbox Code Playgroud)