首页 > 解决方案 > 在 dplyr 中混淆 mutate_all 的 .funs 参数

问题描述

我不理解 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")))

标签: rdplyr

解决方案


在最近的版本中dplyrlist代替funsie 换行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

推荐阅读