分步提取最長(zhǎng)轉(zhuǎn)錄本 | 適用性更廣 | 懂點(diǎn)代碼就會(huì)

前言

廣告時(shí)間:如果覺(jué)得大家覺(jué)得推文有用,可以看下我的個(gè)人簡(jiǎn)介。給個(gè)關(guān)注,謝謝~

生信分析有時(shí)候需要提取最長(zhǎng)“轉(zhuǎn)錄本”,但是有時(shí)候往往會(huì)遇到一些極品,轉(zhuǎn)錄本和基因命名上看起來(lái)毫無(wú)關(guān)系。一些可視化的軟件提取最長(zhǎng)轉(zhuǎn)錄本,但我還未見(jiàn)能實(shí)現(xiàn)這個(gè)功能的。別人寫(xiě)的各種語(yǔ)言版本的提取最長(zhǎng)轉(zhuǎn)錄本還看不懂,也不敢用。自己的R語(yǔ)言能力弱的可憐,不能從頭到位只用tidyverse。沒(méi)辦法,只能用別人造的輪子了。

這篇推文,我將不同的部分使用一種或者多種方法實(shí)現(xiàn)。其中篩選轉(zhuǎn)錄本部分,R語(yǔ)言幾個(gè)簡(jiǎn)單的函數(shù)實(shí)現(xiàn)普適性的最長(zhǎng)轉(zhuǎn)錄組提取。

示例數(shù)據(jù)為Ensembl的pep序列。數(shù)據(jù)位置:http://ftp.ensemblgenomes.org/pub/plants/release-51/fasta/actinidia_chinensis/pep/ 這里我在使用的時(shí)候?qū)⑵渲孛麨?code>Red5.fa。

提取最長(zhǎng)轉(zhuǎn)錄本思路

思路分為以下三個(gè)步驟:(每個(gè)步驟選一個(gè)方法即可)

  1. 將fasta序列讀取為數(shù)據(jù)框格式(三種方法,建議新手使用第二種);

  2. 篩選最長(zhǎng)轉(zhuǎn)錄本,期間要挑出基因ID,按基因ID進(jìn)行分組,按序列長(zhǎng)度排序,然后選擇最長(zhǎng)轉(zhuǎn)錄本(此時(shí)仍為data.frame格式)(一種方法);

  3. 將序列讀出為fasta格式(兩種方法,建議新手使用第二種);

難點(diǎn):第二部分:這部分中選取分割的內(nèi)容需要根據(jù)自己的數(shù)據(jù)修改(這里pep兩側(cè)就各緊鄰了一個(gè)空格)" pep |gene:| transcript:"最為重要,需要注意前后空格。所以,對(duì)于新手,建議下載我用的示例數(shù)據(jù)先進(jìn)行復(fù)現(xiàn),然后再用于自己的數(shù)據(jù)提取。

注意:本文linux命令與R命令混合,以$開(kāi)頭的為linux命令行,其余為R代碼。
perl腳本使用今天的次推《perl腳本練習(xí):fasta格式與tab格式序列之間相互轉(zhuǎn)換(2)(適用范圍更廣)》中的腳本。R包biozhuoer見(jiàn)我之前的推文介紹:R包biozhuoer——將fasta序列讀入為tibble格式

分步提取最長(zhǎng)轉(zhuǎn)錄本

第一步:將fasta序列讀取為數(shù)據(jù)框

(1)第一種方法
使用一個(gè)R包biozhuoer實(shí)現(xiàn)。

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

(2) 第二種方法
使用seqkit fx2tab 功能將fasta序列轉(zhuǎn)換為tab分割I(lǐng)D與seq的內(nèi)容,其中ID部分無(wú)‘>’,但是最后有一個(gè)單獨(dú)的制表符,R讀入后會(huì)有個(gè)空白行,這個(gè)問(wèn)題在讀入的同時(shí)會(huì)選擇相應(yīng)列。
seqkit有win系統(tǒng)版本,但是我還沒(méi)用過(guò)。

$ seqkit fx2tab -o Red5.fa.tsv Red5.fa #當(dāng)然,你也可以在R里使用system()執(zhí)行。

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

(3) 第三種方法
用我自己寫(xiě)的蹩腳perl 腳本 將fasta序列轉(zhuǎn)換為tab格式。

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

用R讀入為data.frame。

library(readr)
#用基礎(chǔ)函數(shù)read.table()無(wú)法將全部數(shù)據(jù)讀入。
df <- read_delim("./fasta/Red5.fa.tsv", delim = "\t", col_names = FALSE)
names(df) <- c("name", "seq")
class(df)

第二步:篩選最長(zhǎng)轉(zhuǎn)錄本(這里只寫(xiě)一種方法)

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其實(shí)可以合并為一個(gè)。主要是拆分寫(xiě)自己看著更能一目了然。
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")

第三步:保存篩選的最長(zhǎng)轉(zhuǎn)錄本

(1)第一種:使用biozhuoer包實(shí)現(xiàn)

library(biozhuoer)
#write_fasta()中的width參數(shù)是個(gè)假參數(shù)
write_fasta(longest_pep,"./fasta/Red5_longest_trans_pep.fa")

(2) 第二種:使用seqkit tab2fx功能實(shí)現(xiàn)
先保存為tab分割的序列,然后用seqkit tab2fx 功能轉(zhuǎn)化為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轉(zhuǎn)化為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

總結(jié)

看著眼花繚亂,仔細(xì)看看條理還是有的。選擇自己覺(jué)得能實(shí)現(xiàn)的方法提取轉(zhuǎn)錄本就可以了。
提取最長(zhǎng)轉(zhuǎn)錄本的第二步是關(guān)鍵,稍微學(xué)下這幾個(gè)函數(shù),注意分割的時(shí)候是否帶空格就可以了。祝大家提取自己的最長(zhǎng)轉(zhuǎn)錄本成功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ????這段時(shí)間簡(jiǎn)書(shū)因?yàn)橐恍┎豢擅枋龅奈恼卤徽D了,所以沒(méi)有做學(xué)習(xí)筆記。加上最近開(kāi)學(xué),亂七八糟的事情很多,目測(cè)要下...
    腐草為嚶閱讀 2,857評(píng)論 0 13
  • 在對(duì)拼裝或者數(shù)據(jù)庫(kù)下載的序列文件進(jìn)行下一步分析時(shí),我們通常會(huì)對(duì)序列進(jìn)行去冗余操作,其中經(jīng)常需要提取同一個(gè)‘gene...
    byemax閱讀 6,840評(píng)論 3 19
  • 可以先使用intron做參考基因組比對(duì)再取??匆幌陆Y(jié)果 如果用取sam的方式,同一條序列只要看左右有沒(méi)有超出int...
    byejya閱讀 1,156評(píng)論 0 1
  • 關(guān)于基因家族鑒定及表達(dá)分析步驟,包括數(shù)據(jù)的獲取,軟件的使用,步驟流程。需要批量的重復(fù)步驟可使用腳本來(lái)完成。 1.1...
    EZ閱讀 8,465評(píng)論 4 25
  • 1 Bedtools:一個(gè)強(qiáng)大的基因組算法工具集 Bedtools是由猶他大學(xué)昆蘭實(shí)驗(yàn)室開(kāi)發(fā)的基因組算法工具集,它...
    生信小書(shū)童閱讀 143,117評(píng)論 2 147

友情鏈接更多精彩內(nèi)容