R 中具有多个分组变量的描述表

问题描述 投票:0回答:1

我有一个如下所示的数据框。

#Grouping Var1
var1<-sample(c("red",'blue', 'orange'), size=100, replace=T)
var2<-sample(c("US", "Canada", "Europe"), size=100, replace=T)
var3<-rnorm(100)
df<-data.frame(var1, var2, var3)
head(df)

如何在 R 中创建一个大致如下所示的表?我觉得

gtsummary
janitor
中的函数应该可以工作,但我无法弄清楚。

分类_变量 Mean_var3
var1
红色 0.2
蓝色 0.3
橙色 0.1
var2
加拿大 0.1
美国 0.5
欧洲 1
r gtsummary janitor
1个回答
0
投票

tidyverse
解决方案:

library(dplyr)
library(tidyr)

set.seed(1)

df <- data.frame(var1 = sample(c("red", "blue", "orange"), 100, replace = T),
                 var2 = sample(c("US", "Canada", "Europe"),  100, replace = T),
                 var3 = rnorm(100))

df1 <- df |>
  pivot_longer(-var3,
               values_to = "Categorical_Variable") |>
  group_by(name, Categorical_Variable) |>
  summarise(Mean_var3 = as.character(sprintf("%.2f", mean(var3))), 
            .groups = "drop") |>
  group_by(name) |>
  group_modify(~ add_row(.x, .before = 0)) |>
  mutate(Categorical_Variable = if_else(is.na(Categorical_Variable),
                                        name, Categorical_Variable),
         Mean_var3 = if_else(is.na(Mean_var3),
                             "", Mean_var3)) |>
  ungroup() |>
  select(-name)

data.frame(df1)  
#   Categorical_Variable Mean_var3
# 1                 var1          
# 2                 blue     -0.08
# 3               orange      0.11
# 4                  red      0.08
# 5                 var2          
# 6               Canada      0.17
# 7               Europe      0.02
# 8                   US     -0.10
© www.soinside.com 2019 - 2024. All rights reserved.