简体   繁体   English

R:从列表的第1列中删除文本

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

FASTA file screenshot FASTA文件截图

I have a fasta file with 100 sequences and I would like to remove everything else than the species name marked in red. 我有一个包含100个序列的fasta文件,我想删除除红色标记的物种名称以外的所有内容。 There are 100 entries and there's a lot of different species names further down the list. 有100个条目,并且列表的后面还有很多不同的物种名称。

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. 我真的是R的新手。我会尽力提供帮助。 Thank you! 谢谢!

edit: 编辑:

as requested: 按照要求:

dput(head(fasta.file)) results screenshot dput(head(fasta.file))结果截图

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确定物种名称的位置

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

Which means it is between .1 and voucher . 这意味着它在.1voucher之间。

Then remove it with sub 然后用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. dplyr软件包使您可以使用%>%从上至下“管道”事物,感觉比嵌套函数更自然。

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. 在第二个gsub() ,然后删除从第一个空格到字符串结尾的所有内容。 This preserves only the seond word. 这仅保留第二个单词。

This does not work if you have Species consisting of two parts, eg "mus musculus". 如果您的物种包含两个部分,例如“小家鼠”,则此方法不起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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