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

R语言如何快速生成同分类多变量横向频率统计含合计表格

方案1:tidyverse 批量实现(最简便)

只需一次指定所有需要处理的变量,后续新增变量仅需更新目标变量列表即可,无需重复编写处理逻辑:

library(tidyverse)
data("mtcars")

# 此处填写所有需要生成频数统计的变量名,新增变量直接往向量里加即可
target_vars <- c("cyl", "gear", "carb")

result <- mtcars %>%
  select(all_of(target_vars)) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "category") %>%
  count(variable, category) %>%
  pivot_wider(names_from = category, values_from = n, values_fill = 0) %>%
  rowwise() %>%
  mutate(sum = sum(c_across(-variable))) %>%
  ungroup()

# 输出结果与需求完全匹配:第一列为变量名,中间列为分类频数,最后一列为行合计
print(result)
方案2:基础R实现(无需安装第三方包)

如果不需要依赖tidyverse生态,用基础R的apply族函数也可以实现批量处理:

data("mtcars")
target_vars <- c("cyl", "gear", "carb")

# 批量处理每个变量的频数统计
result_list <- lapply(target_vars, function(v) {
  freq_tab <- table(mtcars[[v]])
  res <- as.data.frame(t(as.matrix(freq_tab)))
  res$variable <- v
  res$sum <- rowSums(res[, colnames(res) != "variable"])
  return(res)
})

# 合并所有变量结果,缺失分类自动填充0
result <- do.call(rbind, result_list)
result[is.na(result)] <- 0
# 调整列顺序为 变量名→分类列→合计列
result <- result[, c("variable", setdiff(colnames(result), c("variable", "sum")), "sum")]
rownames(result) <- NULL

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:06:04