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

时间:2017-04-12 12:50:23

标签: r

FASTA file screenshot

我有一个包含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)) results screenshot

以下是结果:

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

3 个答案:

答案 0 :(得分:0)

您可以使用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)

答案 1 :(得分:0)

如果我正确理解了你的问题并且名称总是位于标题栏中的第二和第三位置,那么你可以将这些名称作为

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

答案 2 :(得分:0)

dplyr包允许您从上到下“管道”事物, 使用%>%,感觉比嵌套函数更自然。

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

结果:

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

这里我删除了从字符串开头到第一个空格的所有非空白字符。

在第二个gsub()中,删除从第一个空格到字符串结尾的所有内容。这只保留了这个词。

如果您的物种由两部分组成,则不起作用,例如: “mus musculus”。