You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将tabyl函数生成的分类变量统计结果保存至Excel单个工作表?

将tabyl统计结果保存到Excel单个工作表

要把所有分类变量的tabyl统计结果存入同一个Excel工作表,你可以通过整理列表结果并拼接,再用openxlsx包写入文件,以下是两种实用方案:

方案1:按变量独立表格依次排列(带分隔)

这种方式保留每个变量的tabyl原生格式,用变量名和空行区分不同变量的统计结果,可读性强:

# 加载所需包
library(janitor)
library(openxlsx)

# 你的原始数据
dat <- structure(list(ID = c(55L, 67L, 83L, 78L, 43L, 29L), color1 = c("red", 
"yellow", "blue", "red", "green", "yellow"), color2 = c("blue", 
NA, "yellow", "yellow", NA, "green"), color3 = c(NA, NA, NA, 
"blue", NA, NA), shape1 = c("circle", "triangle", "circle", "square", 
"square", "circle"), shape2 = c("triangle", NA, NA, "circle", 
"circle", "triangle"), size = c("small", "medium", "large", "large", 
"small", "medium")), class = "data.frame", row.names = c(NA, 
-6L))

# 生成所有变量的tabyl统计列表
tabyl_list <- lapply(dat, function(x) tabyl(x))

# 格式化每个统计表格:添加变量名标题,拼接时加空行分隔
formatted_tables <- lapply(names(tabyl_list), function(var_name) {
  tab <- tabyl_list[[var_name]]
  # 生成变量名标题行
  header <- data.frame(!!var_name := var_name, n = "", percent = "", stringsAsFactors = FALSE)
  # 合并标题和统计表格
  rbind(header, tab)
})

# 拼接所有表格,每个表格后加空行
combined_table <- do.call(rbind, lapply(formatted_tables, function(tbl) {
  rbind(tbl, data.frame(matrix(ncol = ncol(tbl), nrow = 1)))
}))

# 移除最后一行多余的空行
combined_table <- combined_table[-nrow(combined_table), ]

# 写入Excel文件
write.xlsx(combined_table, "分类变量统计结果.xlsx", sheetName = "统计汇总", rowNames = FALSE)

方案2:统一长格式整理

这种方式将所有变量的统计结果转换成标准长表格,适合后续批量处理或筛选:

# 加载所需包
library(janitor)
library(dplyr)
library(tidyr)
library(openxlsx)

# 仅筛选分类变量(跳过ID这类数值型),整理成统一格式
combined_results <- dat %>%
  select(where(is.character)) %>%
  pivot_longer(everything(), names_to = "变量名", values_to = "类别") %>%
  tabyl(`变量名`, 类别) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns() %>%
  pivot_longer(-`变量名`, names_to = "类别", values_to = "统计结果") %>%
  separate(`统计结果`, into = c("观测数", "百分比"), sep = " \\(") %>%
  mutate(百分比 = gsub("\\)", "", 百分比))

# 写入Excel文件
write.xlsx(combined_results, "分类变量统计结果.xlsx", sheetName = "统计汇总", rowNames = FALSE)

注意事项

  • 如果不需要包含ID这类数值变量的统计,在生成tabyl_list时可以先筛选变量:lapply(select(dat, where(is.character)), function(x) tabyl(x))
  • openxlsx包支持自定义Excel样式,如果需要美化表格,可以添加createStyle相关代码调整字体、边框等。

内容的提问来源于stack exchange,提问作者ElR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:05:15