在R语言中计算带Peer分组的多列业务实践出现百分比
嘿,这需求我熟!要做不同同行分组下各实践的参与占比统计对吧?我给你两种实用的实现方案,还有最终的汇总表示例参考:
方案1:用SQL实现
假设你的数据表名为company_practices,可以用下面的SQL语句直接计算占比:
SELECT Peer, ROUND(100 * SUM(CASE WHEN P1 = 'yes' THEN 1 ELSE 0 END) / COUNT(*), 1) AS P1_占比, ROUND(100 * SUM(CASE WHEN P2 = 'yes' THEN 1 ELSE 0 END) / COUNT(*), 1) AS P2_占比, ROUND(100 * SUM(CASE WHEN P3 = 'yes' THEN 1 ELSE 0 END) / COUNT(*), 1) AS P3_占比, ROUND(100 * SUM(CASE WHEN P4 = 'yes' THEN 1 ELSE 0 END) / COUNT(*), 1) AS P4_占比 FROM company_practices GROUP BY Peer;
这里用CASE WHEN统计每个实践为yes的企业数,除以分组内总企业数再乘以100,ROUND用来控制小数点位数,你可以根据需求调整精度。
方案2:用Python Pandas实现
如果是用Python处理数据,假设你已经把数据读入了DataFramedf,可以这样操作:
# 按Peer分组,计算每个实践的yes占比 summary_df = df.groupby('Peer')[['P1', 'P2', 'P3', 'P4']].apply( lambda x: (x == 'yes').mean() * 100 ).round(1) # 重命名列,让结果更清晰 summary_df.columns = ['P1_占比(%)', 'P2_占比(%)', 'P3_占比(%)', 'P4_占比(%)'] print(summary_df)
这段代码会直接算出每个Peer分组下各实践的参与百分比,round(1)同样是控制小数点位数,按需修改即可。
最终汇总表示例(虚构数据)
| Peer | P1_占比(%) | P2_占比(%) | P3_占比(%) | P4_占比(%) |
|---|---|---|---|---|
| yes | 65.2 | 72.8 | 58.1 | 41.5 |
| no | 40.3 | 55.7 | 32.9 | 28.6 |
这样就能直观对比同行组和非同行组在各实践上的参与差异啦!
内容的提问来源于stack exchange,提问作者Hester Lyons
相关产品推荐
相关产品推荐

