我有一個FASTA_16S.txt檔案,其中包含不同長度的段落,頂部有一個唯一的代碼(例如 16S317)。轉入 后R,我有一個包含 413 個成員的串列,如下所示:
[1]">16S317_V._rotiferianus_A\n
AAATTGAAGAGTTTGATCATGGCTCAG..."
[2]">16S318_Salmonella_bongori\n
AAATTGAAGAGTTTGATCATGGCTCAGATT..."
[3]">16S319_Escherichia_coli\n
TTGAAGAGTTTGATCATGGCTCAGATTG...
我需要用表中的新代碼替換現有代碼Code_16S:
Old New
1. 16S317 16S001
2. 16S318 16S307
3. 16S319 16S211
4. ... ...
任何人都可以提出一個可以識別舊代碼并用新代碼替換的代碼嗎?考慮到我們在 New 列和 Old 列中有相同的代碼,所以直接應用gsuborreplace對整個串列不起作用(替換后我們有兩個段落具有相同的代碼,因此接下來的一個步驟將更改它們) .
下面是我對這個問題的解決方案,但我不認為它是最優的。
uj5u.com熱心網友回復:
而不是使用lapply,它可能更容易str_replace_all
library(stringr)
library(tibble)
FASTA_16S <- str_replace_all(FASTA_16S, deframe(Code_16S))
-輸出
FASTA_16S
[1] ">16S001_V._rotiferianus_A\n\nAAATTGAAGAGTTTGATCATGGCTCAG..."
[2] ">16S307_Salmonella_bongori\n\nAAATTGAAGAGTTTGATCATGGCTCAGATT..."
資料
FASTA_16S <- c(">16S317_V._rotiferianus_A\n\nAAATTGAAGAGTTTGATCATGGCTCAG...",
">16S318_Salmonella_bongori\n\nAAATTGAAGAGTTTGATCATGGCTCAGATT..."
)
Code_16S <- structure(list(Old = c("16S317", "16S318", "16S319"), New = c("16S001",
"16S307", "16S211")), class = "data.frame", row.names = c("1.",
"2.", "3."))
uj5u.com熱心網友回復:
只要新代碼按照舊代碼排序,對應檔案中段落的順序,就可以逐段進行替換。(最初表格按列排序New)
Num = seq.int(1:413) # total number of paragraphs
Code_16S = codes$New
F_16S = function(x) {
row = code_16S[x]
gsub("^.{7}", paste(">", row, sep = ""), FASTA_16S[[1]][x])
}
N_16S = lapply(Num, F_16S)
gsub("^[>].{7}",我嘗試用每個字串中的第一個字符 ( ) 替換前 6 個字符(代碼),>但它不起作用,因此添加了paste功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446358.html
上一篇:使用np.loadtxt從格式奇怪的文本檔案中匯入資料
下一篇:如何將物件寫入檔案?
