创建多个描述性表格(带循环)并在 R 中存储为数据帧

Creating multiple descriptive tables (with a loop) and storing as dataframes in R

我正在尝试创建一个简单的 'for loop' 以使用 R 生成一系列描述性 tables(保存为数据帧),但我正在努力这样做。

例如,我可以创建一个简单的描述性 table(称为 'Var_1_tab'),如下所示:

library(janitor)

Var_1<- c("a", "b", "b", "a", "b", "b", "b")
Var_2<- c("b", "b", "a", "a", "a", "b", "a")
Var_3<- c("c", "b", "a", "c", "c", "b", "a")

df<- data.frame(Var_1, Var_2, Var_3)

Var_1_tab<- df %>% janitor::tabyl(Var_1)

我想使用循环对我的数据框中的每一列进行排序,并为每一列生成相同的简单描述 table,将结果作为数据框存储在我的全局环境中。额外的好处是能够将每个数据框命名为 'Var_1_tab'、'Var_2_tab' 等,以便于参考。

有人可以帮忙吗?

谢谢!!!

tabyl 也可以使用带引号的列名。因此,我们遍历列名并将输出保存在 list

library(purrr)
library(dplyr)
df_lst <- map(names(df), ~ df %>% 
      janitor::tabyl(all_of(.x)))
names(df_lst) <- paste0(names(df), "_tab")

-输出

> df_lst
$Var_1_tab
 Var_1 n   percent
     a 2 0.2857143
     b 5 0.7142857

$Var_2_tab
 Var_2 n   percent
     a 4 0.5714286
     b 3 0.4285714

$Var_3_tab
 Var_3 n   percent
     a 2 0.2857143
     b 2 0.2857143
     c 3 0.4285714

可以使用 $[[ 使用名称

提取列表元素
> df_lst[["Var_1_tab"]]
 Var_1 n   percent
     a 2 0.2857143
     b 5 0.7142857

如果我们需要在全局环境中创建对象(不推荐),请在命名的 list

上使用 list2env
list2env(df_lst, .GlobalEnv)

并检查对象

> Var_1_tab
 Var_1 n   percent
     a 2 0.2857143
     b 5 0.7142857
> Var_2_tab
 Var_2 n   percent
     a 4 0.5714286
     b 3 0.4285714