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

R语言如何实现dataframe同行GO编码与对应描述配对分组

R实现GO编码与对应描述配对拼接

处理这类分号分隔的关联值格式数据,按元素特征分类后按顺序配对即可,不需要复杂的正则操作。

输入数据复现

df <- data.frame(
  Protein = c("a", "b"),
  ID = c("F_GO_0015;F_glycine","F_GO_00037;F_GO_00041;F_mRNA;F_cysteine")
)
df

输入数据预览:

Protein                                       ID
1       a                      F_GO_0015;F_glycine
2       b F_GO_00037;F_GO_00041;F_mRNA;F_cysteine

处理思路

  • 按;把每行ID拆分为独立的元素向量
  • 从向量中分离两类元素:所有带GO_前缀的编码项、所有不带GO_前缀的描述项,两类元素按出现顺序一一对应
  • 每对编码和描述用-拼接为一组,所有拼接完成的组重新用;连接为字符串,替换原ID列即可

实现代码(基础R版,无额外依赖)

match_go_pair <- function(x) {
  # 拆分单个字符串为元素向量
  id_parts <- unlist(strsplit(x, ";"))
  # 提取所有GO编码项
  go_items <- id_parts[grepl("GO_", id_parts)]
  # 提取所有对应的描述项
  desc_items <- id_parts[!grepl("GO_", id_parts)]
  # 按顺序配对拼接
  paired_parts <- paste(go_items, desc_items, sep = "-")
  # 合并为符合要求的字符串
  paste(paired_parts, collapse = ";")
}

df.new <- df
df.new$ID <- sapply(df$ID, match_go_pair, USE.NAMES = FALSE)

结果验证

运行后输出的df.new完全匹配预期结果:

Protein                                      ID
1       a                       F_GO_0015-F_glycine
2       b F_GO_00037-F_mRNA;F_GO_00041-F_cysteine

提示:该逻辑默认输入数据中GO编码的数量和对应描述的数量完全相等,和示例格式一致。如果数据存在格式异常(比如编码和描述数量不匹配),可以在函数中增加长度校验逻辑,避免出现配对错位的问题。

内容的提问来源于stack exchange,提问作者Marta López

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:57:51