繁体   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