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

如何用R循环批量生成带行百分比的交叉表?

批量生成带行百分比的交叉表解决方案

不用重复写三次代码,用tidyverse可以轻松批量处理var1、var2、var3三个变量,这里提供两种高效实现方式:

方法一:用purrr::map遍历变量名

先定义要处理的变量列表,再循环代入你的交叉表逻辑:

library(tidyverse)

# 指定要处理的变量
target_vars <- c("var1", "var2", "var3")

# 批量生成交叉表,每个变量对应一个结果表
cross_table_list <- map(target_vars, function(current_var) {
  df_example %>% 
    group_by(country) %>% 
    count(.data[[current_var]], wt = weight) %>% 
    arrange(.data[[current_var]]) %>% 
    mutate(pctg = round(n/sum(n), 4)) %>% 
    select(-n) %>% 
    pivot_wider(names_from = all_of(current_var), values_from = pctg) %>% 
    mutate(source_var = current_var) # 标记该表对应的原变量
})

# 可选:把所有表合并成一个数据框
combined_result <- bind_rows(cross_table_list)
  • .data[[current_var]]用来动态引用循环中的变量名
  • 添加source_var列可以区分不同变量的结果,方便后续查看或筛选

方法二:先转长格式再批量处理

这种方式代码更紧凑,一次性生成所有变量的交叉表:

df_example %>% 
  # 只保留需要的列
  select(country, starts_with("var"), weight) %>% 
  # 把var1-var3转成长格式:变量名+对应值
  pivot_longer(cols = starts_with("var"), names_to = "source_var", values_to = "response") %>% 
  # 按变量和国家分组计算
  group_by(source_var, country) %>% 
  count(response, wt = weight) %>% 
  mutate(pctg = round(n/sum(n), 4)) %>% 
  select(-n) %>% 
  # 转回宽格式得到交叉表
  pivot_wider(names_from = response, values_from = pctg)

这种方法直接输出按source_var分组的所有结果,无需额外合并步骤,适合快速查看所有变量的行百分比分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:03:19