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

在R语言中匹配字符串片段并拼接生成新列的实现方法

提取并拼接GTF文件中含"gene"标识的字段

需求说明

从拆分后的GTF数据中,提取所有包含"gene"标识的字段,按行拼接成新列Gene_Name,无匹配内容的行填充NA。

解决方案代码

基于你已有的代码,使用dplyr、tidyr和splitstackshape工具完成处理:

# 加载所需包
library(dplyr)
library(tidyr)
library(splitstackshape)

# 读取并预处理数据(你的原始代码)
DP_GTF <- read.delim("E:/Genome_Files/GTF/DolosPig51524.gtf", sep = "\t", comment.char = "#", header = F) %>% 
  subset(V3 == "CDS") %>% 
  cSplit("V9", ";")

# 1. 给每行添加唯一行标识,避免合并时出错
DP_GTF <- DP_GTF %>% rowid_to_column("row_id")

# 2. 提取所有V9拆分列,筛选含"gene"的内容并按行拼接
gene_info <- DP_GTF %>%
  # 将分散的V9_xx列转为长格式
  pivot_longer(cols = starts_with("V9_"), names_to = "col_name", values_to = "gene_str") %>%
  # 过滤空值和不含"gene"的条目,同时去除字符串前后空格
  filter(!is.na(gene_str) & stringr::str_detect(gene_str, "gene")) %>%
  mutate(gene_str = trimws(gene_str)) %>%
  # 按行分组拼接匹配到的内容
  group_by(row_id) %>%
  summarise(Gene_Name = paste(gene_str, collapse = ", ")) %>%
  ungroup()

# 3. 合并回原数据,无匹配内容的行填充NA
DP_GTF_final <- DP_GTF %>%
  left_join(gene_info, by = "row_id") %>%
  # 移除临时行标识列
  select(-row_id) %>%
  # 将空字符串转为标准NA
  mutate(Gene_Name = ifelse(is.na(Gene_Name) | Gene_Name == "", NA, Gene_Name))

代码说明

  • rowid_to_column:给每行添加唯一ID,确保后续合并时能准确对应原行数据。
  • pivot_longer:将拆分后的多列V9_01、V9_02等转为长格式,方便统一筛选。
  • str_detect:精准匹配包含"gene"的字符串,结合filter过滤无效内容。
  • paste(collapse = ", "):将同一行的多个"gene"条目拼接为逗号分隔的字符串。
  • left_join:保留原数据所有行,无匹配内容的Gene_Name列自动填充NA,最后通过mutate统一空值格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:34:50