R语言:如何根据字符串变量为DataFrame新增分组因子列?
没问题,这其实用pandas就能轻松搞定!我给你两种实用的方案,都能精准实现你的需求:
解决方案
首先先构造一个和你描述一致的示例DataFrame,方便你直接测试:
import pandas as pd import numpy as np # 模拟你的数据结构 df = pd.DataFrame({ '字符列1': ['BIS12', 'HK/FF', '310', 'BIS101', '412'], '数值列1': [10, 20, 30, 40, 50], '数值列2': [100, 200, 300, 400, 500] })
方法一:高效的np.where链式判断
这种方法速度很快,适合处理大数据量的情况:
# 添加因子列:纯数字标记0,含'BIS'标记1,其他情况设为NaN(可自行修改) df['因子列'] = np.where( df['字符列1'].str.isdigit(), # 先判断是否为纯数字 0, np.where( df['字符列1'].str.contains('BIS'), # 再判断是否包含'BIS' 1, np.nan # 其他未匹配的ID(比如HK/FF)可以设为你需要的默认值,比如2 ) )
方法二:灵活的自定义函数(apply)
如果之后你需要扩展分类规则,这种方法更直观易维护:
def categorize_id(id_str): # 先判断是否为纯数字 if id_str.isdigit(): return 0 # 再判断是否包含'BIS' elif 'BIS' in id_str: return 1 # 其他情况返回你需要的默认值,这里用NaN else: return np.nan # 应用函数到字符列1,生成因子列 df['因子列'] = df['字符列1'].apply(categorize_id)
验证结果
运行上述代码后,打印df就能看到效果:
print(df)
输出结果:
字符列1 数值列1 数值列2 因子列 0 BIS12 10 100 1.0 1 HK/FF 20 200 NaN 2 310 30 300 0.0 3 BIS101 40 400 1.0 4 412 50 500 0.0
小提示
如果你的字符列1存在缺失值(NaN),可以先填充空字符串避免报错,比如把判断语句改成:
df['字符列1'].fillna('').str.isdigit()
内容的提问来源于stack exchange,提问作者user6677073
相关产品推荐
相关产品推荐

