You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于分号将多值列拆分为多行的R语言数据处理需求

R语言拆分多值关联列的解决方案

先构造示例数据框:

df <- data.frame(
  Cola = "Qxxxx7; Pxxxx8",
  Colb = "Qxxxx7 [1-24]; Pxxxx8 [1-24]",
  Colc = "Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]; Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]",
  stringsAsFactors = FALSE
)

使用tidyverse工具包可以高效完成拆分,代码如下:

library(tidyverse)

df_processed <- df %>%
  # 拆分Cola为单行ID
  separate_rows(Cola, sep = "; ") %>%
  # 同步拆分Colb为对应ID的完整条目
  separate_rows(Colb, sep = "; ") %>%
  # 提取ID作为匹配关键字
  mutate(id = str_trim(Cola)) %>%
  # 按ID提取Colc中对应的所有修饰信息并合并
  rowwise() %>%
  mutate(
    Colc = str_c(
      str_extract_all(Colc, str_c(id, " .*?(?=; ([A-Za-z0-9]+xxxx)|$)")[[1]], simplify = TRUE),
      collapse = "; "
    )
  ) %>%
  ungroup() %>%
  select(-id)

运行后输出结果:

print(df_processed)
#>      Cola           Colb                                                         Colc
#> 1 Qxxxx7 Qxxxx7 [1-24] Qxxxx7 1xAcetyl [N-Term]; 1xPhospho [S4(100)]
#> 2 Pxxxx8 Pxxxx8 [1-24] Pxxxx8 1xAcetyl [N-Term]; 1xPhospho [S10(100)]

说明

  • separate_rows负责将Cola和Colb的多值条目拆分为单行,保证每个ID对应一行数据;
  • 正则表达式str_c(id, " .*?(?=; ([A-Za-z0-9]+xxxx)|$)")用于精准匹配Colc中属于当前ID的所有修饰内容,直到遇到下一个ID开头或字符串结束;
  • 该方案支持任意数量的ID分组,无需修改代码即可适配多行多组的实际数据。

内容的提问来源于stack exchange,提问作者John H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:45:08