如何在R中用apply简化按菌种统计药物药敏频率的操作
按菌种批量统计药敏频率的实现方案
假设你的数据集用Pandas存储,结构大概是这样(示例):
| 菌种名称 | 青霉素 | 头孢呋辛 | 左氧氟沙星 |
|---|---|---|---|
| 大肠杆菌 | S | R | S |
| 大肠杆菌 | R | S | I |
| 肺炎克雷伯菌 | S | S | R |
| 肺炎克雷伯菌 | R | R | S |
下面是不用重复写代码的批量实现方法:
1. 自定义药敏统计函数
先写一个通用函数,用来计算单列药物的各类药敏结果频率:
def calculate_antibiotic_freq(series): # 计算各类药敏结果的占比,保留两位小数并转成百分比格式 freq = series.value_counts(normalize=True).round(2) * 100 return freq.apply(lambda x: f"{x}%")
2. 分组后批量应用函数
用groupby按菌种分组,然后对所有药物列(排除菌种名称列)批量应用上面的函数:
import pandas as pd # 假设你的数据集叫df drug_cols = df.columns.drop("菌种名称") # 提取所有药物列 result = df.groupby("菌种名称")[drug_cols].apply(calculate_antibiotic_freq) # 整理结果格式,让输出更直观 result = result.unstack(level=-1).reset_index()
3. 扩展:针对特定药敏类型统计
如果只需要统计「敏感(S)」的频率,可以修改自定义函数:
def calculate_sensitive_freq(series): sensitive_rate = (series == "S").mean().round(2) * 100 return f"{sensitive_rate}%" result_sensitive = df.groupby("菌种名称")[drug_cols].apply(calculate_sensitive_freq)
关键说明
- 不用逐个复制代码的核心是:用
groupby分组后,直接对多列批量应用自定义函数,避免重复编写每个药物的统计代码。 - 如果你的药敏标记是数值型(比如1=敏感,0=耐药),只需要调整函数里的判断逻辑即可。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

