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. 代码解读
-
导入必要的包:
rlibrary(GenomicRanges) library(rtracklayer)这些包提供了对基因组范围数据的操作和与 GTF 文件的读写功能。
-
读取 GTF 文件:
rgtf_grange <- rtracklayer::import(gtf_file)通过
rtracklayer::import函数读取 GTF 文件,并将其转换为GRanges对象。GRanges是用于表示基因组数据的一个类,可以存储染色体、位置、基因、注释等信息。 -
查看原始染色体名称:
rhead(seqnames(gtf_grange)) # 查看前几行的染色体名称 seqlevels(gtf_grange) # 查看允许的染色体名称seqnames(gtf_grange):获取 GTF 文件中所有基因组元素(如基因、转录本等)的染色体名称。seqlevels(gtf_grange):返回GRanges对象中所有允许的染色体名称(即该数据集中可能出现的染色体名称的"级别")。
-
修改染色体前缀:
rexisting_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匹配。
-
保存修改后的 GTF 文件:
rrtracklayer::export(gtf_grange, con = output_file)将修改后的
GRanges对象导出为新的 GTF 文件。
03. 延伸:如何使用 GRanges 的常用用法
GRanges 是一个非常强大的 R 类,用于表示基因组范围的数据,通常用于处理基因组注释文件(如 GTF、BED 文件等)。以下是一些常用的操作方法:
-
创建
GRanges对象:rgr <- GRanges(seqnames = Rle(c("chr1", "chr2", "chr3")), ranges = IRanges(start = c(1, 101, 201), end = c(50, 150, 250)))GRanges对象是由染色体名称 (seqnames)、位置范围 (ranges) 和其他属性(如基因名、注释等)组成。 -
筛选
GRanges对象中的数据:rgr_subset <- gr[gr$seqnames == "chr1"]可以通过条件筛选来提取感兴趣的基因组区域。
-
提取
GRanges中的特定信息:rseqnames(gr) # 获取染色体名称 start(gr) # 获取起始位置 end(gr) # 获取结束位置 width(gr) # 获取宽度 -
合并
GRanges对象:rgr_merged <- reduce(gr)reduce函数将重叠的基因组区域合并为一个更大的区域。 -
进行基因组范围的操作(如找交集、并集、差集等):
rgr1 <- 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) -
按顺序排列
GRanges对象:rgr_sorted <- sort(gr) -
将
GRanges转换为数据框:rgr_df <- as.data.frame(gr) -
导入和导出其他格式的数据 :
GRanges对象可以轻松导入和导出为多种格式,例如 GTF、BED 和 VCF 格式。rrtracklayer::export(gr, con = "output.gtf") gr_imported <- rtracklayer::import("input.gtf")
总结
- 修改染色体前缀 :使用
GenomicRanges和rtracklayer包,我们可以方便地加载、操作和保存基因组注释文件(如 GTF 文件)。 GRanges类的强大功能 :GRanges提供了丰富的操作方法,可以用于处理基因组范围数据、筛选感兴趣的区域、进行范围运算等。