GenomicRanges 修改 GTF 文件学习笔记

01. 全部代码
r 复制代码
# 导入所需的 R 包
library(GenomicRanges)
library(rtracklayer)

# 读取 GTF 文件
gtf_file <- "xxx.gtf"
gtf_grange <- rtracklayer::import(gtf_file)

# 查看原始 seqnames 和 seqlevels
head(seqnames(gtf_grange))  # 查看前几行的染色体名称
seqlevels(gtf_grange)  # 查看允许的染色体名称

# 假设你要将 "Chr" 改为 "B73_Chr",确保新的名称是有效的
# 获取现有的 seqlevels
existing_seqlevels <- seqlevels(gtf_grange)

# 修改 seqlevels,确保修改后的名称存在于 seqlevels 中
new_seqlevels <- gsub("^Chr", "B73_Chr", existing_seqlevels)

# 将新的 seqlevels 分配给 GRanges 对象
seqlevels(gtf_grange) <- new_seqlevels

# 更新 seqnames
seqnames(gtf_grange) <- gsub("^Chr", "B73_Chr", seqnames(gtf_grange))

# 查看修改后的结果
head(seqnames(gtf_grange))

# 保存修改后的 GTF 文件
output_file <- "modified_Zm-B73.gtf"
rtracklayer::export(gtf_grange, con = output_file)

# 查看保存后的数据
head(rtracklayer::import(output_file))

################################################
################################################
################################################
合并gtf文件
# 加载GenomicRanges包
library(GenomicRanges)
library(rtracklayer)
# 读取两个GTF文件
gtf_a_v2 <- rtracklayer::import("/public/work/Project/Single_cell/project_yyr/puli_maize/00.ref/modify_ref/RNA/Mo17/a.gtf")
gtf_b73 <- rtracklayer::import("/public/work/Project/Single_cell/project_yyr/puli_maize/00.ref/modify_ref/RNA/B73/Zm-B73-REFERENCE-GRAMENE-4.0_Zm00001d.2_v3.gtf")

# 给a_v2.gtf的染色体名称加上Mo17_前缀
new_seqlevels <- gsub("^chr", "Mo17_chr", seqlevels(gtf_a_v2))
seqlevels(gtf_a_v2) <- new_seqlevels
seqnames(gtf_a_v2) <- gsub("^chr", "Mo17_chr", seqnames(gtf_a_v2))
###合并
combined_gtf <- c(gtf_a_v2, gtf_b73)
export(combined_gtf, "/public/work/Project/Single_cell/project_yyr/puli_maize/00.ref/modify_ref/RNA/F1/combined_gtf.gtf")


head(combined_gtf)
02. 代码解读
  1. 导入必要的包

    r 复制代码
    library(GenomicRanges)
    library(rtracklayer)

    这些包提供了对基因组范围数据的操作和与 GTF 文件的读写功能。

  2. 读取 GTF 文件

    r 复制代码
    gtf_grange <- rtracklayer::import(gtf_file)

    通过 rtracklayer::import 函数读取 GTF 文件,并将其转换为 GRanges 对象。GRanges 是用于表示基因组数据的一个类,可以存储染色体、位置、基因、注释等信息。

  3. 查看原始染色体名称

    r 复制代码
    head(seqnames(gtf_grange))  # 查看前几行的染色体名称
    seqlevels(gtf_grange)  # 查看允许的染色体名称
    • seqnames(gtf_grange):获取 GTF 文件中所有基因组元素(如基因、转录本等)的染色体名称。
    • seqlevels(gtf_grange):返回 GRanges 对象中所有允许的染色体名称(即该数据集中可能出现的染色体名称的"级别")。
  4. 修改染色体前缀

    r 复制代码
    existing_seqlevels <- seqlevels(gtf_grange)
    new_seqlevels <- gsub("^Chr", "B73_Chr", existing_seqlevels)
    seqlevels(gtf_grange) <- new_seqlevels
    seqnames(gtf_grange) <- gsub("^Chr", "B73_Chr", seqnames(gtf_grange))
    • gsub("^Chr", "B73_Chr", existing_seqlevels) :将原本的 Chr 前缀替换为 B73_Chr,确保新的染色体名称符合要求。
    • seqlevels(gtf_grange) <- new_seqlevels :将更新后的染色体级别(new_seqlevels)应用到 GRanges 对象。
    • seqnames(gtf_grange) <- gsub("^Chr", "B73_Chr", seqnames(gtf_grange)) :更新数据中的染色体名称,确保它们与新的 seqlevels 匹配。
  5. 保存修改后的 GTF 文件

    r 复制代码
    rtracklayer::export(gtf_grange, con = output_file)

    将修改后的 GRanges 对象导出为新的 GTF 文件。

03. 延伸:如何使用 GRanges 的常用用法

GRanges 是一个非常强大的 R 类,用于表示基因组范围的数据,通常用于处理基因组注释文件(如 GTF、BED 文件等)。以下是一些常用的操作方法:

  1. 创建 GRanges 对象

    r 复制代码
    gr <- GRanges(seqnames = Rle(c("chr1", "chr2", "chr3")),
                  ranges = IRanges(start = c(1, 101, 201), end = c(50, 150, 250)))

    GRanges 对象是由染色体名称 (seqnames)、位置范围 (ranges) 和其他属性(如基因名、注释等)组成。

  2. 筛选 GRanges 对象中的数据

    r 复制代码
    gr_subset <- gr[gr$seqnames == "chr1"]

    可以通过条件筛选来提取感兴趣的基因组区域。

  3. 提取 GRanges 中的特定信息

    r 复制代码
    seqnames(gr)  # 获取染色体名称
    start(gr)     # 获取起始位置
    end(gr)       # 获取结束位置
    width(gr)     # 获取宽度
  4. 合并 GRanges 对象

    r 复制代码
    gr_merged <- reduce(gr)

    reduce 函数将重叠的基因组区域合并为一个更大的区域。

  5. 进行基因组范围的操作(如找交集、并集、差集等):

    r 复制代码
    gr1 <- GRanges(seqnames = "chr1", ranges = IRanges(start = 1, end = 100))
    gr2 <- GRanges(seqnames = "chr1", ranges = IRanges(start = 50, end = 150))
    
    # 交集
    gr_intersection <- intersect(gr1, gr2)
    
    # 并集
    gr_union <- union(gr1, gr2)
    
    # 差集
    gr_difference <- setdiff(gr1, gr2)
  6. 按顺序排列 GRanges 对象

    r 复制代码
    gr_sorted <- sort(gr)
  7. GRanges 转换为数据框

    r 复制代码
    gr_df <- as.data.frame(gr)
  8. 导入和导出其他格式的数据
    GRanges 对象可以轻松导入和导出为多种格式,例如 GTF、BED 和 VCF 格式。

    r 复制代码
    rtracklayer::export(gr, con = "output.gtf")
    gr_imported <- rtracklayer::import("input.gtf")

总结

  • 修改染色体前缀 :使用 GenomicRangesrtracklayer 包,我们可以方便地加载、操作和保存基因组注释文件(如 GTF 文件)。
  • GRanges 类的强大功能GRanges 提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。
相关推荐
微爱帮监所写信寄信2 分钟前
微爱帮监狱寄信写信小程序信件内容实时保存技术方案
java·服务器·开发语言·前端·小程序
沛沛老爹2 分钟前
Web开发者实战A2A智能体交互协议:从Web API到AI Agent通信新范式
java·前端·人工智能·云原生·aigc·交互·发展趋势
shizhenshide4 分钟前
物联网(IoT)设备如何应对验证码?探讨无头浏览器与协议级解决方案
java·struts·microsoft·验证码·ezcaptcha
七夜zippoe4 分钟前
响应式编程基石 Project Reactor源码解读
java·spring·flux·响应式编程·mono·订阅机制
独自归家的兔7 分钟前
基于 豆包大模型 Doubao-Seed-1.6-thinking 的前后端分离项目 - 图文问答(后端)
java·人工智能·豆包
笔夏8 分钟前
【安卓学习之myt】adb常用命令
android·学习·adb
IT 行者15 分钟前
Spring Framework 6.x 异常国际化完全指南:让错误信息“说“多国语言
java·后端·spring·异常处理·problemdetail·国际化i18n
ss27315 分钟前
CompletionService:Java并发工具包
java·开发语言·算法
晓131320 分钟前
后端篇——第一章 Maven基础全面教程
java·maven
浅川.2521 分钟前
数据结构(复习笔记)
笔记