二分与多分类特征关联条形图绘制及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
相关产品推荐
相关产品推荐

