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 提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。
相关推荐
m0_587383009 分钟前
外卖CPS系统开发实战:从架构设计到运营落地全指南
java·spring·小程序·架构·需求分析
zhangzeyuaaa10 分钟前
Python asyncio 事件循环演进:从手动管理到现代化实践
java·服务器·python
Yanjun2i14 分钟前
Agent学习记录三:完成 Agent Loop
python·学习·agent
学编程就要猛41 分钟前
流式编程及Spring中SSE实现
java·后端·spring·流式编程
随遇而安zx1 小时前
【多线程】---ConcurrentHashMap 源码解析
java·多线程·并发
不才不才不不才1 小时前
Spring 源码系列(27): @Transactional 七大失效场景与源码归因
java·后端·spring
随遇而安zx1 小时前
【多线程】---线程池 ThreadPoolExecutor 原理与调优
java·线程池·多线程
抠脚小弟1 小时前
WebSocketServer 使用详解:从入门到实战
java·spring·websocketserver
随便做点啥1 小时前
32卡64G-910B4-16后端集群部署报告
java·大数据·运维
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之字段验证与自定义验证注解实战
java·算法·spring