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 提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。
相关推荐
【上下求索】5 分钟前
学习笔记095——Ubuntu 安装 lrzsz 服务?
运维·笔记·学习·ubuntu
LiamTuc5 分钟前
Java构造函数
java·开发语言
长安er16 分钟前
LeetCode 206/92/25 链表翻转问题-“盒子-标签-纸条模型”
java·数据结构·算法·leetcode·链表·链表翻转
Benmao⁢21 分钟前
C语言期末复习笔记
c语言·开发语言·笔记·leetcode·面试·蓝桥杯
菜鸟plus+32 分钟前
N+1查询
java·服务器·数据库
我要添砖java43 分钟前
《JAVAEE》网络编程-什么是网络?
java·网络·java-ee
CoderYanger1 小时前
动态规划算法-01背包问题:50.分割等和子集
java·算法·leetcode·动态规划·1024程序员节
2401_834517071 小时前
AD学习笔记-27 泪滴的添加和移除
笔记·学习
zyq~2 小时前
【课堂笔记】凸优化问题-2
笔记
灰灰勇闯IT2 小时前
RN路由与状态管理:打造多页面应用
开发语言·学习·rn路由状态