繁体   English   中英

使用 purrr 在多个列中映射我的用户 function

[英]Mapping my user function in several columns with purrr

我正在尝试使用map function 将其应用到我的 dataframe 的多个列中。我的 function 有两个参数; 数据和一列,并且工作正常,但我想同时将它应用于多个列。 例如,这就是它如何处理变量 BAD(数字)

> frec_procedure<-function(data,colu){
+ 
+   data%>% count({{colu}},name = "Frecuency") %>% 
+     mutate(Percent =formattable::percent(Frecuency / sum(Frecuency)),
+            Cumulative_Freq=cumsum(Frecuency),
+            Cumulative_Perc=cumsum(Percent))
+ }
> 
> d1 %>% frec_procedure(BAD)
# A tibble: 2 x 5
    BAD Frecuency Percent    Cumulative_Freq Cumulative_Perc
  <dbl>     <int> <formttbl>           <int> <formttbl>     
1     0      4771 80.05%                4771 80.05%         
2     1      1189 19.95%                5960 100.00%       

或变量 JOB(character)

d1 %>% frec_procedure(JOB)
# A tibble: 7 x 5
  JOB     Frecuency Percent    Cumulative_Freq Cumulative_Perc
  <chr>       <int> <formttbl>           <int> <formttbl>     
1 Mgr           767 12.87%                 767 12.87%         
2 Office        948 15.91%                1715 28.78%         
3 Other        2388 40.07%                4103 68.84%         
4 ProfExe      1276 21.41%                5379 90.25%         
5 Sales         109 1.83%                 5488 92.08%         
6 Self          193 3.24%                 5681 95.32%         
7 NA            279 4.68%                 5960 100.00%    

所以,问题是当我尝试使用map function ( purr包)同时将我的 function 应用于其他变量时。 我将其用于 map function,但结果仅显示 d1 的案例总数,而没有考虑每个变量的 frec_procedure

> try_map <- tibble(vars = c("BAD", "JOB", "REASON")) %>% 
+   mutate(metrics = vars %>% map(~frec_procedure(d1)))
> try_map$metrics
[[1]]
# A tibble: 1 x 4
  Frecuency Percent    Cumulative_Freq Cumulative_Perc
      <int> <formttbl>           <int> <formttbl>     
1      5960 100.00%               5960 100.00%        

[[2]]
# A tibble: 1 x 4
  Frecuency Percent    Cumulative_Freq Cumulative_Perc
      <int> <formttbl>           <int> <formttbl>     
1      5960 100.00%               5960 100.00%        

[[3]]
# A tibble: 1 x 4
  Frecuency Percent    Cumulative_Freq Cumulative_Perc
      <int> <formttbl>           <int> <formttbl>     
1      5960 100.00%               5960 100.00%   

我将不胜感激任何可能实现结果的建议或帮助。 太感谢了。

{{}}与未引用的 arguments 一起使用。为了传递引用,我们可能必须转换为符号并评估 ( !! ) - sym ensym

frec_procedure<-function(data,colu){

   data%>% count(!! rlang::ensym(colu),name = "Frecuency") %>% 
     mutate(Percent =formattable::percent(Frecuency / sum(Frecuency)),
            Cumulative_Freq=cumsum(Frecuency),
            Cumulative_Perc=cumsum(Percent))
 }

-测试

> map(c("cyl", "vs"), ~ frec_procedure(mtcars, !! .x))
[[1]]
  cyl Frecuency Percent Cumulative_Freq Cumulative_Perc
1   4        11  34.38%              11          34.38%
2   6         7  21.88%              18          56.25%
3   8        14  43.75%              32         100.00%

[[2]]
  vs Frecuency Percent Cumulative_Freq Cumulative_Perc
1  0        18  56.25%              18          56.25%
2  1        14  43.75%              32         100.00%

> frec_procedure(mtcars, cyl)
  cyl Frecuency Percent Cumulative_Freq Cumulative_Perc
1   4        11  34.38%              11          34.38%
2   6         7  21.88%              18          56.25%
3   8        14  43.75%              32         100.00%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM