dplyr中的mutate_all令人困惑的.funs参数

时间:2019-10-23 18:08:42

标签: r dplyr

我不了解dplyr软件包中mutate_all()的.funs参数。问题很可能出在我身上,但我想了解我所缺少的。

我经常不得不重新编码多个变量,例如李克特项目集。

下面的示例代码复制了我经常遇到的问题以及我自己的解决方案,但是对我来说,我的解决方案看起来并不像帮助文档一样。那我想念什么呢?

#Data
var1<-sample(c('A', 'B', 'C'), 100, replace=T)
var2<-sample(c('A', 'B', 'C'), 100, replace=T)
dat<-data.frame(var1, var2)
library(tidyverse)
library(car)
#As per help documentation
dat %>% 
mutate_all(., .funs(Recode(., "'A'=1"))) # This doesn't work, generates an error

#this works but the help documentation does not get you there in anyway, unless I am missing 
something. 
dat %>% 
mutate_all(., funs(Recode(., "'A'=1")))

1 个答案:

答案 0 :(得分:0)

在最新版本的dplyr中,list代替了funs,即用list代替了funs

library(dplyr) #v 0.8.3
library(car)

所以,要么

dat %>% 
  mutate_all(.funs = ~Recode(., "'A' = 1")) %>%
  head(5)
#  var1 var2
#1    B    C
#2    B    C
#3    B    C
#4    B    1
#5    C    C

dat %>%
   mutate_all(~ Recode(., "'A' = 1")) %>%
   head(5)
#  var1 var2
#1    B    C
#2    B    C
#3    B    C
#4    B    1
#5    C    C

甚至没有匿名函数调用

dat %>%
   mutate_all(Recode, "'A' = 1") %>%
   head(5)
#  var1 var2
#1    B    C
#2    B    C
#3    B    C
#4    B    1
#5    C    C