在R语言中拆分字符串为多行并同步复制其他列数据
R语言拆分含多磷酸化位点的字符串并拆分行
需求说明:
- 数据框
df的Column1字段中,字符串最后一个下划线后的部分包含1-9组S/T/Y字母+数字的磷酸化位点组合 - 当组合数量大于1时,需要将该字符串拆分为多行,每行对应一个位点组合,同时复制该行其他列的所有数据
输入示例代码
# 定义输入字符串 string1 <- "A01235_414_429_2_2_Y414T418S687" string2 <- "C2" string3 <- "C3" # 创建数据框 df <- data.frame(Column1 = string1, Column2 = string2, Column3 = string3) # 打印原数据框 print(df)
解决方案代码
使用tidyr结合dplyr的tidyverse方案实现,逻辑清晰且简洁:
library(tidyr) library(dplyr) new_df <- df %>% # 拆分出前缀(最后一个下划线之前的内容)和位点组(最后一个下划线之后的内容) mutate( prefix = sub("_(.*)$", "", Column1), sites = sub(".*_", "", Column1) ) %>% # 按S/T/Y的位置拆分位点组为多行(正向预查正则确保拆分后保留位点前缀字母) separate_rows(sites, sep = "(?=[STY])") %>% # 重组拆分后的Column1内容 mutate(Column1 = paste0(prefix, "_", sites)) %>% # 移除中间辅助列 select(-prefix, -sites) # 打印结果 print(new_df)
输出结果
Column1 Column2 Column3 1 A01235_414_429_2_2_Y414 C2 C3 2 A01235_414_429_2_2_T418 C2 C3 3 A01235_414_429_2_2_S687 C2 C3
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

