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 提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。
相关推荐
世人万千丶20 小时前
Flutter 框架跨平台鸿蒙开发 - 恐惧清单应用
学习·flutter·华为·开源·harmonyos·鸿蒙
yuzhuanhei20 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132120 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald20 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川20 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月20 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66620 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川20 小时前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java