如何在R中用purrr::map为janitor::tabyl设置变量名称
解决方法
问题根源是map传递给tabyl的是单个向量,tabyl处理向量时默认将类别列命名为.。以下两种方法可以快速将列名恢复为原变量名:
方法1:使用imap直接获取变量名并重命名
imap可以同时迭代列的数值和对应的变量名,结合rename和准引用语法替换列名:
library(palmerpenguins) suppressPackageStartupMessages(library(dplyr)) library(purrr) suppressPackageStartupMessages(library(janitor)) palmerpenguins::penguins |> select(where(~is.factor(.x) | is.character(.x))) |> imap(~ tabyl(.x) |> rename(!!.y := .))
执行后,每个结果的第一列都会显示原变量名(比如species、island),而非默认的.。
方法2:使用map2传递变量名列表
先提取变量名,再和列数据一起传入map2完成重命名:
penguin_categorical <- palmerpenguins::penguins |> select(where(~is.factor(.x) | is.character(.x))) var_names <- names(penguin_categorical) map2(penguin_categorical, var_names, ~ tabyl(.x) |> rename(!!.y := .))
两种方法核心都是通过purrr的迭代函数获取原变量名,再替换tabyl生成的默认列名,最终效果一致。
内容的提问来源于stack exchange,提问作者itsMeInMiami
相关产品推荐
相关产品推荐

