在R中合并列字符串模式生成新列:提取SYMBOL字段
提取数据框中SYMBOL字段内容生成新列
问题场景
现有如下数据框,需要创建新列V3,提取V1、V2列中匹配模式"SYMBOL="后的字段内容。
输入数据框
V1 V2 ------------------------------------- SYMBOL=GABRD SYMBOL_SOURCE=HGNC FLAGS=cds_end_NF SYMBOL=GABRD SYMBOL=MASP2 SYMBOL_SOURCE=HGNC FLAGS=cds_start_NF SYMBOL=GABRD SYMBOL=GABRD SYMBOL_SOURCE=HGNC FLAGS=cds_start_NF SYMBOL=GABRD
期望输出
新列V3内容如下:
V3 ----- GABRD GABRD MASP2 GABRD GABRD GABRD
解决方案
方法一:R语言实现
借助dplyr和stringr包,先合并每行的V1、V2内容,再通过正则提取目标字段:
library(dplyr) library(stringr) # 构造示例数据框 df <- data.frame( V1 = c("SYMBOL=GABRD", "FLAGS=cds_end_NF", "SYMBOL=MASP2", "FLAGS=cds_start_NF", "SYMBOL=GABRD", "FLAGS=cds_start_NF"), V2 = c("SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD", "SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD", "SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD"), stringsAsFactors = FALSE ) # 生成V3列 df <- df %>% mutate( combined = paste(V1, V2, sep = " "), V3 = str_extract(combined, "(?<=SYMBOL=)\\w+") ) %>% select(-combined) # 查看结果 print(df$V3)
方法二:Python语言实现
用pandas结合正则表达式,对每行的V1、V2拼接后提取目标内容:
import pandas as pd import re # 构造示例数据框 data = { "V1": ["SYMBOL=GABRD", "FLAGS=cds_end_NF", "SYMBOL=MASP2", "FLAGS=cds_start_NF", "SYMBOL=GABRD", "FLAGS=cds_start_NF"], "V2": ["SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD", "SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD", "SYMBOL_SOURCE=HGNC", "SYMBOL=GABRD"] } df = pd.DataFrame(data) # 定义提取函数 def extract_symbol(row): text = f"{row['V1']} {row['V2']}" match = re.search(r"SYMBOL=(\w+)", text) return match.group(1) if match else None # 生成V3列 df['V3'] = df.apply(extract_symbol, axis=1) # 查看结果 print(df['V3'])
内容的提问来源于stack exchange,提问作者Jim_13
相关产品推荐
相关产品推荐

