与purrr:map一起使用count/mutate组合

与purrr:map一起使用count/mutate组合,r,purrr,R,Purrr,样本数据: ï..Employee_Name PositionID Position State Zip 1: Adinolfi, Wilson K 19 Production Technician I MA 1960 2: Ait Sidi, Karthikeyan 27 Sr. DBA MA 2148 3: Akinkuolie, S

样本数据:

       ï..Employee_Name       PositionID              Position State  Zip
  1:   Adinolfi, Wilson  K         19  Production Technician I    MA 1960
  2: Ait Sidi, Karthikeyan         27                  Sr. DBA    MA 2148
  3:     Akinkuolie, Sarah         20 Production Technician II    MA 1810
  4:          Alagbe,Trina         19  Production Technician I    MA 1886
  5:       Anderson, Carol         19  Production Technician I    MA 2169
 ---                                                                     
307:        Woodson, Jason         20 Production Technician II    MA 1810
308:     Ybarra, Catherine         19  Production Technician I    MA 2458
309:      Zamora, Jennifer          6                      CIO    MA 2067
310:           Zhou, Julia          9             Data Analyst    MA 2148
311:         Zima, Colleen         19  Production Technician I    MA 1730
我编写了自己的函数,计算数据帧中某个变量的观测实例,然后将其转换为因子:

HRdata_factor_count <- function(df, var) {
        df %>% 
        count(.data[[var]], sort = T) %>% 
        mutate(!!var := fct_reorder(factor(.data[[var]]), n))
    }
如何解决这个问题,并让map返回一个列表,其中包含df中每个变量的实例数

我试过了,但结果很奇怪

    HRnames <- names(HRdata)
map2(HRdata, HRnames, ~HRdata_factor_count, df = .x, var =.y)

$Position
function(df, var) {
  df %>% 
    count(.data[[var]], sort = T) %>% 
    mutate(!!var := fct_reorder(factor(.data[[var]]), n))
}
<bytecode: 0x000001e2ce372f60>

$State
function(df, var) {
  df %>% 
    count(.data[[var]], sort = T) %>% 
    mutate(!!var := fct_reorder(factor(.data[[var]]), n))
hrname%
计数(.data[[var]],sort=T)%>%
变异(!!var:=fct_重新排序(因子(.data[[var]]),n))
}
$State
函数(df,var){
df%>%
计数(.data[[var]],sort=T)%>%
变异(!!var:=fct_重新排序(因子(.data[[var]]),n))

根据您提供的数据,您可以尝试
purr
imap

imap(mtcars, ~count(tibble(.x), !!.y := factor(.x)))
作为功能

foo <- function(x, y) count(tibble(x), !!y := factor(x))
imap(mtcars, foo)

根据您提供的数据,您可以尝试
purr
imap

imap(mtcars, ~count(tibble(.x), !!.y := factor(.x)))
作为功能

foo <- function(x, y) count(tibble(x), !!y := factor(x))
imap(mtcars, foo)

您可以添加一些示例数据吗?
HRdata
是列表吗?此外,您可以在
count
中进行转换,例如
mtcars%>%count(cyl=factor(cyl))%%>%scape()
也可以检查
HRdata\u factor\u count()
函数是否在
map()中指定了两个输入变量
df
var
call you仅提供1,即
.x
我添加了示例数据您可以添加一些示例数据吗?
HRdata
是列表吗?此外,您可以在
count
内进行转换,例如
mtcars%>%count(cyl=因子(cyl))%%>%skillip()
还可以检查
HRdata\u factor\u count()
函数在
map()中指定两个输入变量,
df
var
call you only supply 1,即
.x
我已经添加了示例数据。我创建的函数有什么方法可以实现吗?我使用map2进行了尝试,并更新了上面的查询。没有。你的函数不会以这种方式运行。请参阅Ray的注释我的提示,.x是一个向量,而不是一个数据帧。嘿,你帮了我很多忙,把我指回到了Ray的评论。我意识到我不需要使用我编写的函数。最后,我在我的数据帧上使用了一个普通映射和一个表函数,它工作得很好。我仍在试图找出如何在同一时间fct_重新排序,但我认为这与管道有关。有什么方法可以使用我创建的函数吗?我使用了它ng map2并更新了我上面的查询否。你的函数不会那样工作。请看Ray的注释我的提示,.x是一个向量而不是一个data.frame。嘿,你帮了我很多忙,让我回到Ray的注释。我意识到我不需要使用我编写的函数。最后,我在我的dataframe上使用了一个带有表函数的普通映射它工作得很好。我仍在试图找出如何在同一时间fct_重新排序,但我认为这与管道有关。