簡體   English   中英

R:從列表的第1列中刪除文本

[英]R: Removing text from column 1 in a list

FASTA文件截圖

我有一個包含100個序列的fasta文件,我想刪除除紅色標記的物種名稱以外的所有內容。 有100個條目,並且列表的后面還有很多不同的物種名稱。

我試過了:

s1 <- sapply(strsplit(fasta.file$Header, split=' ', fixed=TRUE), function(x) (x[2]))
[1] "Acossus" ...

s2 <- sapply(strsplit(fasta.file$Header, split=' ', fixed=TRUE), function(x) (x[3]))
[1] "populi" ...

但這並不能真正解決我的問題,或者我看不出它是如何解決的。 我真的是R的新手。我會盡力提供幫助。 謝謝!

編輯:

按照要求:

dput(head(fasta.file))結果截圖

這是一段結果:

        > dput(head(fasta.file))
    structure(list(Header = c("KT147837.1 Acossus populi voucher HLC-20342 cytochrome oxidase subunit 1 (COI) gene, partial cds; mitochondrial", 
    "GU092174.1 Acossus centerensis voucher BIOUG<CAN>:Moth4503.03 cytochrome oxidase subunit 1 (COI) gene, partial cds; mitochondrial", 
    "KF492042.1 Prionoxystus sp. BOLD:AAY7397 voucher CWM-94-0234 cytochrome oxidase subunit 1 (COI) gene, partial cds; mitochondrial", 
    "JQ604298.1 Ceromacra sp. Poole01 cytochrome oxidase subunit 1 (COI) gene, partial cds; mitochondrial"
    ), Sequence = c("AATAGTAGGAACTTCTCTAAGTTTATTAATTCGAGCTGAATTAGGAAATCCAGGGTCCCTAATTGGGAATGACCAAATTTATAATACTATTGTTACAGCTCATGCTTTCATCATAATTTTTTTCATAGTAATACCAATCATAATTGGAGGATTTGGAAATTGATTAGTACCACTAATATTAGGAGCCCCCGATATAGCTTTCCCACGAATAAACAATATAAGATTTTGACTATTACCCCCATCCCTAACCCTTTTAATTTCTAGAAGTATTGTTGAAAATGGAGCTGGCACAGGATGAACTGTTTACCCCCCTTTATCATCTAATATTGCTCATAGAGGAAGATCAGTTGATTTAGCAATTTTCTCTTTACATTTAGCTGGTATTTCATCAATTTTAGGAGCTATTAATTTCATTACAACAATTATTAATATACGACCTAATAACATATCATTTGATCAAATACCACTATTTATTTGAGCTGTTGGAATTACTACTTTACTACTACTTCTTTCACTTCCAGTTTTAGCTGGTGCAATTACTATATTATTAACAGATCGAAATTTAAATACATCATTTTTTGACCCTGCAGGAG", 
    "AACATTATATTTTATTTTTGGTATTTGATCTGGAATAGTGGGAACTTCTCTAAGTTTATTAATTCGAACTGAATTAGGAAACCCAGGATCTCTAATTGGGAATGATCAAATTTATAATACTATTGTTACAGCTCATGCTTTCATTATAATTTTTTTCATAGTAATACCAATTATAATTGGAGGATTTGGAAATTGATTAGTGCCTCTAATATTAGGAGCCCCTGATATAGCTTTCCCACGGATAAACAACATAAGATTTTGATTATTACCCCCATCATTAACCCTTTTAATTTCTAGAAGTATTATTGAAAATGGAGCCGGCACAGGATGAACTGTCTATCCCCCTTTATCATCTAATATTTCCCACGGAGGAAGATCAGTTGATTTAACGATTTTCTCCTTACATTTAGCTGGTATTTCATCAATTTTAGGAGCTATTAATTTCATTACAACAATTATTAATATACGACCTAATAATATATCATTTGATCAAATACCATTATTTGTTTGAGCTGTTGGAATTACTGCTTTACTACTTCTGCTTTCATTACCCGTTTTAGCTGGAGCAATTACTATATTATTAACAGACCGAAATTTAAATACATCATTTTTTGACCCTGCAGGAGGAGGAGANCCTATTTTATATCAACATTTATTT", 
    "AACATTATATTTCATTTTTGGTATTTGATCTGGAATAGTGGGAACTTCTTTAAGTTTATTAATTCGAGCTGAATTAGGAAATCCAGGATCTCTAATTGGAAACGATCAAATTTATAATACTATTGTTACAGCTCATGCTTTTATTATAATTTTTTTTATGGTAATACCAATTATAATTGGAGGATTTGGAAATTGATTAGTACCATTAATACTAGGAGCTCCTGACATAGCTTTCCCCCGAATAAATAATATAAGATTTTGATTATTACCCCCCTCTTTAACTCTTCTTCTTTCTAGAAGTATCGTTGAAAATGGAGCTGGCACAGGATGAACTGTTTACCCCCCTTTATCATCAAATATCGCTCATGGAGGAAGATCAATTGATTTAGCAATCTTCTCTTTACATTTAGCTGGTATTTCATCAATCTTAGGGGCCATTAACTTCATTACAACGATCATTAATATACGACCTAATAACATATCATTTGATCAAATACCTTTATTTGTTTGAGCTGTTGGAATTACCGTCTTATTACTTTTACTTTCTCTACCAGTTCTAACTGGAGCAATTACTATGTTATTAACAGATCGAAATTTAAATACATCATTTTTTGATCCTGCAGGAGGGGGAGACCCTATTTTATACCAACATTTATTT", 
    "AACTTTATATTTTATTTTTGGAATTTGAGCAGGAATAGTAGGAACTTCTTTAAGTTTATTAATTCGAGCTGAACTAGGAAATCCTGGTTCTCTTATTGGAGATGATCAAATTTATAATACTATTGTTACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATACCTATTATAATTGGAGGATTTGGAAATTGATTAGTACCTTTAATATTAGGAGCCCCAGATATAGCTTTCCCCCGAATAAATAATATAAGTTTTTGATTATTACCCCCTTCACTAACTCTTTTAATTTCTAGAAGAATTGTAGAAAATGGAGCAGGTACAGGATGAACAGTTTACCCCCCACTTTCATCTAATATTGCTCATGGAGGTAGATCAGTTGATTTAGCTATTTTTTCATTACATTTAGCTGGTATTTCATCAATTTTAGGAGCAATTAATTTTATTACAACAATTATTAATATACGATTAAATAATTTATCATTTGATCAAATACCCCTCTTTATTTGAGCTGTAGGAATTACTGCATTTCTTTTACTTTTATCATTACCTGTATTAGCTGGAGCAATTACTATACTTTTAACAGATCGAAATTTAAATACATCATTTTTTGATCCAGCAGGAGGAGGAGATCCAATTCNNTATCAACATTTATTT"
    )), .Names = c("Header", "Sequence"), row.names = c(NA, 4L), class = c("Fasta", 
    "data.frame"))
>

您可以使用regexpr確定物種名稱的位置

regexpr(".1",fasta.file$Header)[1]+3
regexpr("voucher",fasta.file$Header)[1]-2

這意味着它在.1voucher之間。

然后用sub將其刪除

sub(substr(fasta.file$Header,regexpr(".1",fasta.file$Header)[1]+3,regexpr("voucher",fasta.file$Header)[1]-2),"",fasta.file$Header)

如果我正確理解了您的問題,並且名稱始終位於“標題”列的第二和第三位,那么您可以將這些名稱獲取為

s1 <- lapply(fasta.file$Header, function(x) paste(strsplit(x, split='\\s+')[[1]][2:3], collapse = ' '))

dplyr軟件包使您可以使用%>%從上至下“管道”事物,感覺比嵌套函數更自然。

library(dplyr) 
fa$Header %>% 
        gsub(pattern="^\\S+\\s", replacement="", perl=TRUE) %>%
        gsub(pattern="\\s.+$", replacement="", perl=TRUE) 

結果:

[1] "Acossus"      "Acossus"      "Prionoxystus" "Ceromacra"  

在這里,我將所有從字符串開頭到第一個空格的非空格字符都刪除了。

在第二個gsub() ,然后刪除從第一個空格到字符串結尾的所有內容。 這僅保留第二個單詞。

如果您的物種包含兩個部分,例如“小家鼠”,則此方法不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM