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
相关产品推荐
相关产品推荐

