如何使用Purrr::map创建多个频率表,其中包含各因子变量的百分比

如何使用Purrr::map创建多个频率表,其中包含各因子变量的百分比,r,tidyverse,purrr,R,Tidyverse,Purrr,我觉得这应该是一件比较简单的事情,但在使用purr::map和table()时,我对百分比有困难。使用“快乐”数据集,我想为每个因子变量创建一个频率表列表。我也希望有四舍五入的百分比,而不是计数,或两者如果可能的话 我可以用下面的代码分别为每个因子变量创建频率符号 library(tidyverse) library(ggmosaic) for "happy" dataset. 但是,在将table()与purr::map一起使用时,我似乎无法使百分比正常工作。下面的代码不起作用 with(

我觉得这应该是一件比较简单的事情,但在使用purr::map和table()时,我对百分比有困难。使用“快乐”数据集,我想为每个因子变量创建一个频率表列表。我也希望有四舍五入的百分比,而不是计数,或两者如果可能的话

我可以用下面的代码分别为每个因子变量创建频率符号

library(tidyverse)
library(ggmosaic) for "happy" dataset. 
但是,在将table()与purr::map一起使用时,我似乎无法使百分比正常工作。下面的代码不起作用

with(happy,round(prop.table(table(marital)),2))
我尝试的第二种方法是使用tidyr::gather,并使用dplyr::mutate计算百分比,然后拆分数据并使用tidyr::spread进行传播

happy%>%select_if(is.factor)%>%map(round(prop.table(table)),2)

因此,对于如何使上述两种方法都起作用的任何帮助,我们都将不胜感激……

您可以使用匿名函数或公式让您的第一个选项起作用。这里是公式选项

TABLE%>%split(TABLE$key)%>%map(~spread(.x,value,perc))
在第二个选项中,删除
NA
值,然后删除
count
变量,然后再进行扩展。但是,结果中的顺序已更改

happy %>% 
    select_if(is.factor) %>% 
    map(~round(prop.table(table(.x)), 2))

类似于
happy%>%select_if(is.factor)%>%map(~round(prop.table)(table(.x)),2))
?查看可以传递给
map
中的
.f
参数的内容,以及帮助页面上的一些示例以了解其他选项。对于第二个选项,在
拆分之前从数据集中删除
计数
,将解决大多数问题。您可能还想删除
value
列中的
NA
组。这些选项似乎有效。如果你加上官方答案,我可以给你评分。
happy %>% 
    select_if(is.factor) %>% 
    map(~round(prop.table(table(.x)), 2))
TABLE = happy %>%  
    select_if(is.factor) %>% 
    gather() %>% 
    filter(!is.na(value)) %>%
    group_by(key, value) %>% 
    summarise(count = n()) %>% 
    mutate(perc = round(count/sum(count), 2), count = NULL)

TABLE %>% 
    split(.$key) %>% 
    map(~spread(.x, value, perc))