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

基于R语言数据框生成高值组合列联表及可视化的技术咨询

解决方案

1. 自动生成High组合的计数表格

用tidyverse实现(简洁高效)

利用dplyr的批量操作自动处理所有变量,无需硬编码变量名:

library(tidyverse)
library(expss)

# 自动获取所有变量名
target_vars <- names(df)

# 筛选所有变量取High(2)的观测,统计各组合的计数
high_combo_counts <- df %>%
  filter(if_all(all_of(target_vars), ~ .x == 2)) %>%
  count(!!!syms(target_vars), name = "count") %>%
  # 将数值替换为对应的标签(Low/High)
  mutate(across(all_of(target_vars), val_lab_recode))

用Base R实现

纯Base R也能完成,通过动态生成筛选逻辑实现自动变量处理:

library(expss)

target_vars <- names(df)

# 动态生成筛选条件:所有变量等于2
filter_expr <- paste0(target_vars, " == 2", collapse = " & ")
# 筛选符合条件的观测
high_subset <- subset(df, eval(parse(text = filter_expr)))
# 统计各组合的频数
high_combo_counts_base <- as.data.frame(table(high_subset[, target_vars]))
colnames(high_combo_counts_base)[ncol(high_combo_counts_base)] <- "count"

# 替换数值为标签
for(var in target_vars) {
  high_combo_counts_base[[var]] <- val_lab_recode(high_combo_counts_base[[var]], val_lab(df[[var]]))
}

2. 带标签的条形图

ggplot2实现(美观易定制)

先将多变量组合合并为单个字符串,再绘制带计数标签的条形图:

library(ggplot2)

# 合并变量组合为字符串
plot_data <- high_combo_counts %>%
  unite("combination", all_of(target_vars), sep = " & ")

ggplot(plot_data, aes(x = combination, y = count)) +
  geom_col(fill = "#2E86AB") +
  geom_text(aes(label = count), vjust = -0.3, size = 4) +
  labs(title = "各High变量组合的观测计数",
       x = "变量组合",
       y = "计数") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Base R实现

用原生绘图函数完成,无需额外包:

# 合并变量组合为字符串
plot_data_base <- high_combo_counts_base %>%
  unite("combination", all_of(target_vars), sep = " & ")

# 绘制条形图,预留标签空间
bar_heights <- plot_data_base$count
bar_positions <- barplot(bar_heights,
                         names.arg = plot_data_base$combination,
                         col = "#2E86AB",
                         main = "各High变量组合的观测计数",
                         xlab = "变量组合",
                         ylab = "计数",
                         las = 2, # 旋转x轴标签为垂直
                         ylim = c(0, max(bar_heights) + 5))

# 添加计数标签
text(x = bar_positions,
     y = bar_heights + 1,
     labels = bar_heights)

关于Base R实现的可行性

完全可以仅用Base R实现所有需求:

  • 表格部分:通过subset筛选数据、table统计频数,结合expss的标签函数完成数值到标签的转换(若不需要标签,纯Base R手动映射也可)。
  • 绘图部分:用barplot绘制条形图,text添加计数标签,通过调整参数实现标签旋转、空间预留等效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:02:36