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 提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。
相关推荐
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程1 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
程序员清风1 天前
用了三年AI,我总结出高效使用AI的3个习惯!
java·后端·面试
beata1 天前
Java基础-13: Java反射机制详解:原理、使用与实战示例
java·后端
用户0332126663671 天前
Java 使用 Spire.Presentation 在 PowerPoint 中添加或删除表格行与列
java