分步提取最长转录本 | 适用性更广 | 懂点代码就会

前言

广告时间:如果觉得大家觉得推文有用,可以看下我的个人简介。给个关注,谢谢~

生信分析有时候需要提取最长“转录本”,但是有时候往往会遇到一些极品,转录本和基因命名上看起来毫无关系。一些可视化的软件提取最长转录本,但我还未见能实现这个功能的。别人写的各种语言版本的提取最长转录本还看不懂,也不敢用。自己的R语言能力弱的可怜,不能从头到位只用tidyverse。没办法,只能用别人造的轮子了。

这篇推文,我将不同的部分使用一种或者多种方法实现。其中筛选转录本部分,R语言几个简单的函数实现普适性的最长转录组提取。

示例数据为Ensembl的pep序列。数据位置:http://ftp.ensemblgenomes.org/pub/plants/release-51/fasta/actinidia_chinensis/pep/ 这里我在使用的时候将其重命名为Red5.fa

提取最长转录本思路

思路分为以下三个步骤:(每个步骤选一个方法即可)

  1. 将fasta序列读取为数据框格式(三种方法,建议新手使用第二种);

  2. 筛选最长转录本,期间要挑出基因ID,按基因ID进行分组,按序列长度排序,然后选择最长转录本(此时仍为data.frame格式)(一种方法);

  3. 将序列读出为fasta格式(两种方法,建议新手使用第二种);

难点:第二部分:这部分中选取分割的内容需要根据自己的数据修改(这里pep两侧就各紧邻了一个空格)" pep |gene:| transcript:"最为重要,需要注意前后空格。所以,对于新手,建议下载我用的示例数据先进行复现,然后再用于自己的数据提取。

注意:本文linux命令与R命令混合,以$开头的为linux命令行,其余为R代码。
perl脚本使用今天的次推《perl脚本练习:fasta格式与tab格式序列之间相互转换(2)(适用范围更广)》中的脚本。R包biozhuoer见我之前的推文介绍:R包biozhuoer——将fasta序列读入为tibble格式

分步提取最长转录本

第一步:将fasta序列读取为数据框

(1)第一种方法
使用一个R包biozhuoer实现。

library(biozhuoer)
df <- read_fasta("./fasta/Red5.fa")
class(df)

(2) 第二种方法
使用seqkit fx2tab 功能将fasta序列转换为tab分割ID与seq的内容,其中ID部分无‘>’,但是最后有一个单独的制表符,R读入后会有个空白行,这个问题在读入的同时会选择相应列。
seqkit有win系统版本,但是我还没用过。

$ seqkit fx2tab -o Red5.fa.tsv Red5.fa #当然,你也可以在R里使用system()执行。

library(readr)
df <- read_delim("./fasta/Red5.fa.tsv", delim = "\t", col_names = FALSE, 
                 col_select = c(X1,X2) #去除最后一个tab造成的空白
                 )
names(df) <- c("name", "seq")
class(df)

(3) 第三种方法
用我自己写的蹩脚perl 脚本 将fasta序列转换为tab格式。

$ perl fa2tab_v2.pl -fa2tab Red5.fa Red5.fa.tsv

用R读入为data.frame。

library(readr)
#用基础函数read.table()无法将全部数据读入。
df <- read_delim("./fasta/Red5.fa.tsv", delim = "\t", col_names = FALSE)
names(df) <- c("name", "seq")
class(df)

第二步:筛选最长转录本(这里只写一种方法)

library(tidyr)
library(dplyr)
library(stringr)
pep <- separate(df,name,c("pep_id","other1","gene_id","other2")," pep |gene:| transcript:") %>%
  mutate(length = str_length(pep$seq)) %>% 
  select(c("pep_id","gene_id","seq","length"))

#这里定义的pep和longest_pep其实可以合并为一个。主要是拆分写自己看着更能一目了然。
longest_pep <- pep %>% group_by(gene_id) %>% 
  arrange(desc(length),by_group = TRUE) %>% 
  slice_head(n=1) %>% 
  select(c("gene_id", "seq"))
names(longest_pep) <- c("name", "seq")

第三步:保存筛选的最长转录本

(1)第一种:使用biozhuoer包实现

library(biozhuoer)
#write_fasta()中的width参数是个假参数
write_fasta(longest_pep,"./fasta/Red5_longest_trans_pep.fa")

(2) 第二种:使用seqkit tab2fx功能实现
先保存为tab分割的序列,然后用seqkit tab2fx 功能转化为fasta格式序列。

library(readr)
write_delim(longest_pep, "./fasta/Red5.fa.tsv", delim = "\t",col_names = F)
$ seqkit tab2fx -o Red5_longest_trans_pep.fa Red5.fa.tsv

(3) 第三种:使用自己的蹩脚perl脚本
先保存为tab分割的序列,然后用自己的蹩脚脚本fa2tab_v2.pl转化为fasta格式序列。

library(readr)
write_delim(longest_pep, "./fasta/Red5.fa.tsv", delim = "\t",col_names = F)
$ perl fa2tab_v2.pl -tab2fa Red5.fa.tsv Red5_longest_trans_pep.fa

总结

看着眼花缭乱,仔细看看条理还是有的。选择自己觉得能实现的方法提取转录本就可以了。
提取最长转录本的第二步是关键,稍微学下这几个函数,注意分割的时候是否带空格就可以了。祝大家提取自己的最长转录本成功。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容