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

二分与多分类特征关联条形图绘制及R列联表生成问题

代码报错核心原因

你原来的代码存在两个逻辑错误,直接导致生成空表:

  • subset函数参数使用错误,多个筛选条件需要用逻辑与&拼接后放在第二个参数位,你把雇佣关系的筛选条件放到了第三个「选择输出列」的参数位,筛选逻辑未生效
  • 你将筛选出的两个子集赋值给Chefarzt和Aerzte变量后,又尝试从原数据集daten0中提取Chefarzt、Aerzte两个不存在的列,自然没有数据可以生成列联表
实现方案

你最初拆分两个dataframe的思路是可行的,但更高效的方式是直接在受雇医师的子集内新增一个二分分组变量,不需要拆分数据集。

第一步:数据预处理

# 先筛选所有受雇医师
daten_angestellt <- subset(daten0, Arbeitsverhaeltnis.EM == "angestellt")
# 新增二分分组列:区分受雇主任医师和其他受雇医师
daten_angestellt$gruppe <- ifelse(daten_angestellt$Position.EM == "Chefarzt", "受雇主任医师", "其他受雇医师")
# 转成因子方便后续统计
daten_angestellt$gruppe <- as.factor(daten_angestellt$gruppe)

第二步:生成列联表

将代码中的mult_feature替换为你需要关联的多分类特征的实际列名即可:

# 生成 二分分组 × 多分类特征 的频数列联表
konf_tab <- table(daten_angestellt$gruppe, daten_angestellt$mult_feature)
print(konf_tab)
# 如果需要看分组内占比,可以转换为百分比格式
prop_tab <- prop.table(konf_tab, margin = 1) * 100
print(round(prop_tab, 2))

第三步:绘制关联条形图

基础R绘图示例

barplot(prop_tab, 
        beside = TRUE, # 填FALSE则为堆叠条形图
        col = c("#1f77b4", "#aec7e8"),
        legend.text = rownames(prop_tab),
        xlab = "多分类特征名称",
        ylab = "分组内占比(%)",
        main = "受雇主任医师与其他医师特征分布对比")

ggplot2绘图示例(效果更美观)

library(ggplot2)
ggplot(daten_angestellt, aes(x = mult_feature, fill = gruppe)) +
  geom_bar(position = "dodge") + # position填"fill"展示占比、"stack"为堆叠展示
  labs(x = "多分类特征名称", y = "人数", fill = "分组") +
  theme_bw()
如果你坚持用拆分两个dataframe的思路,修正后的代码如下
# 修正subset的筛选条件逻辑
Chefarzt <- subset(daten0, Position.EM == "Chefarzt" & Arbeitsverhaeltnis.EM == "angestellt")
Aerzte <- subset(daten0, Position.EM != "Chefarzt" & Arbeitsverhaeltnis.EM == "angestellt")
# 分别统计多分类特征的频数
table_chef <- table(Chefarzt$mult_feature)
table_aerzte <- table(Aerzte$mult_feature)
# 合并得到列联表
konf_tab <- rbind(table_chef, table_aerzte)
rownames(konf_tab) <- c("受雇主任医师", "其他受雇医师")

内容的提问来源于stack exchange,提问作者Kat Rin Mulu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:57:01