【问题标题】:Confusing .funs argument to mutate_all in dplyr在 dplyr 中混淆 mutate_all 的 .funs 参数
【发布时间】:2019-10-23 18:08:42
【问题描述】:

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    在最新版本的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
    

    【讨论】:

    • 所以,当我通过?mutate_all 调出帮助文档时,它并没有显示这个。
    • @spindoctor 我用的是 dplyr 0.8.3
    • 我也是。仔细阅读帮助文档,我看到最后有一个列表参数的引用,但不是在文档的顶部。为此在 Github 页面上提交问题是否合适?还是这太低级了?
    • @spindoctor。我认为它必须在新功能部分中,该功能被弃用并被新功能取代。我有一段时间读过它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多