如何在R中从现有列提取指定内容新建sample_id等多列
实现方案
Python(Pandas 环境)
生信分析中处理测序文件名表格最常用的是Pandas库,直接通过正则匹配一次性提取所需字段即可:
import pandas as pd # 假设df为存储了name列的原始数据框 df[['sample_id', 'timepoint', 'paired_end']] = df['name'].str.extract( r'^(?P<sample_id>\d{10})-(?P<timepoint>\d+)_R(?P<paired_end>\d+)_' ) # 可选:将提取到的数字类字段转换为整型 df['timepoint'] = df['timepoint'].astype(int) df['paired_end'] = df['paired_end'].astype(int)
正则规则完全匹配你给出的文件名格式:
- 开头10位数字匹配为
sample_id -和_R之间的数字匹配为timepoint_R和下一个_之间的数字匹配为paired_end
R(tidyverse 环境)
如果你习惯用R处理数据,使用stringr的正则提取功能即可实现:
library(tidyverse) # 假设df为存储了name列的原始数据框 df <- df %>% mutate( sample_id = str_extract(name, "^\\d{10}"), timepoint = as.integer(str_extract(name, "(?<=-)\\d+(?=_R)")), paired_end = as.integer(str_extract(name, "(?<=_R)\\d+(?=_)")) )
内容的提问来源于stack exchange,提问作者rynne94
相关产品推荐
相关产品推荐

