2017-07-13 57 views
3

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

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) 

如果我尝试:

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

甚至这样的:

newdata<-data%>%mutate_at(funs(change), vars(numbers, morenumbers))  

我收到以下错误

Error: `.vars` must be a character/numeric vector or a `vars()` object, 
not list 
+0

请注意,严格地说'mutate_all'是替换'mutate_each'。此外,现在有一段时间有贬值警告。 – Axeman

回答

4

mutate_at新的原型是:

mutate_at(.tbl, .vars, .funs, ..., .cols = NULL) 

请注意,.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 
+0

我是新的,这将是我失踪的一些容易的事情。非常感谢。我有一个最后期限,并开始恐慌! –