在R中按指定比例为匹配行的Value1列追加字符
实现方案
直接通过分组随机筛选+批量替换就能搞定,而且支持自定义任意多四位代码的追加比例,具体步骤如下:
1. 定义比例配置
用字典指定每个四位代码需要追加" 1"的比例:
# 键是Value1中的代码,值是对应要追加的比例 append_config = { 'AMRO': 0.5, # 50%的AMRO追加" 1" 'CHSP': 0.3 # 30%的CHSP追加" 1" }
2. 分组标记需要追加的行
按Value1分组后,每组内随机挑选指定比例的行,生成标记列:
import pandas as pd import numpy as np # 生成标记列:1表示需要追加,0表示不需要 df['to_append'] = df.groupby('Value1')['Value1'].transform( lambda group: np.random.choice( [1, 0], size=len(group), p=[append_config.get(group.name, 0), 1 - append_config.get(group.name, 0)] ) )
3. 批量追加文本
根据标记列给对应行的Value1追加" 1",完成后可删除标记列:
# 执行追加操作 df['Value1'] = np.where(df['to_append'] == 1, df['Value1'] + ' 1', df['Value1']) # 可选:移除临时标记列 df = df.drop('to_append', axis=1)
额外说明
- 新增代码比例只需在
append_config中添加键值对即可,比如'XYZA': 0.6会给60%的XYZA追加" 1"; - 随机筛选是每组独立执行的,确保每个代码的比例精准,不受其他代码干扰;
- 未在配置中出现的代码,默认不会进行任何修改。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

