使用 purrr 在多个列中映射我的用户功能
Mapping my user function in several columns with purrr
我正在尝试使用 map
函数将其应用到我的数据框中的多个列中。我的函数有两个参数;数据和一列,并且工作正常,但我想同时将它应用于多个列。例如,这就是它如何处理变量 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
函数(purr
包)同时在其他变量中应用我的函数时。我用它来映射函数,但结果只显示了 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%
如果有任何建议或帮助,我将不胜感激。非常感谢。
{{}}
适用于不带引号的参数。为了通过引用,我们可能必须转换为 sym
bol 并评估 (!!
) - ensym
does that
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%
我正在尝试使用 map
函数将其应用到我的数据框中的多个列中。我的函数有两个参数;数据和一列,并且工作正常,但我想同时将它应用于多个列。例如,这就是它如何处理变量 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
函数(purr
包)同时在其他变量中应用我的函数时。我用它来映射函数,但结果只显示了 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%
如果有任何建议或帮助,我将不胜感激。非常感谢。
{{}}
适用于不带引号的参数。为了通过引用,我们可能必须转换为 sym
bol 并评估 (!!
) - ensym
does that
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%