我有一个如下所示的数据框。
#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 |
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