R语言:为特定ID案例生成固定比例的二元随机列
嘿,我懂你要的是什么——不是那种泛泛的随机生成0/1的通用方案,而是专门针对ID=1的特定案例,严格按照你指定的固定比例(比如2个0、4个1)来分配二元值,而且要明确生成0或1对吧?下面用Python pandas给你写个精准的实现方案:
针对ID=1案例的固定比例二元值分配方案
1. 先定位ID=1的行
首先我们要把数据框中ID等于1的行筛选出来,避免影响其他行的数据:
import pandas as pd import numpy as np # 假设你的数据框名为df id1_subset = df[df['ID'] == 1].copy()
2. 构造固定比例的二元数组
根据你需要的比例(比如2个0、4个1),直接创建对应数量的0和1,再打乱顺序实现随机分配:
# 按需求定义0和1的数量 zero_num = 2 one_num = 4 # 拼接成完整的二元列表 binary_values = [0]*zero_num + [1]*one_num # 打乱顺序,让0和1随机分布 np.random.shuffle(binary_values)
3. 将值赋值回原数据框
给原数据框新增一列(比如叫prevalence),只给ID=1的行赋值,其他行可以设为NaN或者你需要的默认值:
# 新增列并初始化默认值 df['prevalence'] = np.nan # 精准赋值给ID=1的行 df.loc[df['ID'] == 1, 'prevalence'] = binary_values
方案优势
- 完全**针对特定案例(ID=1)**操作,不会干扰其他行的数据
- 严格保证你要的固定比例,不会出现随机生成时比例偏差的情况
- 通过打乱顺序实现了“随机分配”的要求,同时比例精准可控
灵活调整比例的扩展方式
如果ID=1的案例数量变化,或者你需要按百分比定义比例(比如30%的0、70%的1),可以用下面的方式动态计算数量:
total_id1_cases = len(id1_subset) # 按百分比计算0的数量,比如30% zero_num = int(total_id1_cases * 0.3) one_num = total_id1_cases - zero_num # 后续步骤和上面一致 binary_values = [0]*zero_num + [1]*one_num np.random.shuffle(binary_values) df.loc[df['ID'] == 1, 'prevalence'] = binary_values
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

