简体   繁体   中英

R: Removing text from column 1 in a list

FASTA file screenshot

I have a fasta file with 100 sequences and I would like to remove everything else than the species name marked in red. There are 100 entries and there's a lot of different species names further down the list.

I've tried:

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" ...

But this doesn't really solve my problem, or I don't see how it does. I'm really new to R. I'd appreciate every help. Thank you!

edit:

as requested:

dput(head(fasta.file)) results screenshot

and here is a piece the results:

        > 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"))
>

You can determine the location of species name with regexpr

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

Which means it is between .1 and voucher .

Then remove it with 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 = ' '))

The dplyr package lets you "pipe" things from top to bottom, with %>% , feels more natural than nested functions.

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

Result:

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

Here I've removed all nonwhitespace chars from the beginning of the string to first whitespace.

In a second gsub() , then deleted everything from first whitespace to end of string. This preserves only the seond word.

This does not work if you have Species consisting of two parts, eg "mus musculus".

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM