R语言:如何基于另一数据框的部分匹配为数据框行分类?
解决df1样本名称与df2分组匹配的问题
嘿,我来帮你搞定这个分组匹配的需求!咱们可以用Python的pandas库一步步实现,下面是具体的操作步骤和代码:
1. 先构造示例数据
首先咱们先把你提到的两个数据框创建出来,方便测试:
import pandas as pd # 创建df1 df1 = pd.DataFrame({ 'SAMPLE NAMES': ['1_a', '1_b', '1_c', '2_a', '2_b', '3_a', '4_a', '4_b'] }) # 创建df2 df2 = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'GROUP': ['X', 'X', 'Y', 'Z'] })
2. 从df1的样本名称中提取ID
咱们需要把SAMPLE NAMES里的数字部分(比如1_a里的1)提取出来,作为匹配的ID。这里用正则提取的方式最稳妥:
# 提取样本名称开头的数字,转为整数类型(和df2的ID类型保持一致) df1['ID'] = df1['SAMPLE NAMES'].str.extract(r'^(\d+)').astype(int)
如果你的样本名称是用下划线固定分隔的,也可以用df1['SAMPLE NAMES'].str.split('_').str[0].astype(int),效果一样~
3. 合并数据框获取分组
现在咱们把两个数据框通过ID列关联,就能得到每个样本对应的分组了:
# 合并并保留需要的列 result_df = pd.merge(df1, df2, on='ID', how='left')[['SAMPLE NAMES', 'GROUP']]
4. 查看结果
运行完上面的代码后,打印result_df就能看到你想要的结果:
SAMPLE NAMES GROUP 0 1_a X 1 1_b X 2 1_c X 3 2_a X 4 2_b X 5 3_a Y 6 4_a Z 7 4_b Z
这样就完美实现了根据样本名称的部分匹配,给df1添加上对应的分组啦!
内容的提问来源于stack exchange,提问作者Amanda Sia
相关产品推荐
相关产品推荐

