【问题标题】:Filter based on a character in a given position of string根据字符串给定位置的字符进行过滤
【发布时间】:2022-11-29 03:28:41
【问题描述】:

我有以下字符串,我想根据第一个位置的 A 或 T,然后是第二个位置的 C 或 T 等进行过滤。

structure(list(barcode.Universe.sub = c("TCCGCTGGTGCG", "GTCGCGGACTGC", 
"CTTCCAAAATAG", "CCCCTTTCGTGG", "TTTCAGCGTCAG", "TACGAGCCTGGT", 
"AGCAGTATCAAC", "TAACCGTATAGA", "GGCTAATTCCGC", "CTCGGTTGGGCG", 
"TCCCGTGCGCCC", "TCTCCCAAACGA", "ATCATGGTCAAC", "ACCGCACTGAAC", 
"AAGTTTTCCTCA", "CTAGAGACCGAT", "CATTCTCATGGA", "ATGCGCGGCGAA", 
"GAGTGCCCTAGG", "ATGAGTAGTAGG", "TCTAGCGTCATT", "TCTCAACTTCTC", 
"GAGAACGCTCCT", "TACAGGACACAC", "GATTCTCACGAT", "GAGACGGAGGCC", 
"GCGGCTCCTCTA", "TGGATACTCTGC", "GCACCGCGTTCA", "GAATTGATAAGT", 
"GGGCAGCAGATA", "GGCATATACGGC", "TCATCACTATGA", "CGCGGCTGGGAT", 
"AGTCGCCACGCT", "TTGGCCGAAATT", "CGAGACCCACCG", "TGGTGCCTCACT", 
"CTGATACTGGGT", "AGGTGGCGTCTA", "GGCAAGGAGTAC", "GCGACTGAAATA", 
"AGCTTCGGATTA", "GTTGCCAGACTC", "AGCTGTCGCACG", "AGGGTTCGCTGT", 
"GTGCGTACCGCG", "CGCTTACACATG", "ACAACGCCATGT", "ATATACTAAGCC", 
"ACCGGAATAGCT", "CTACGAACGACT", "TAACCTTATGCT", "GCCTGCAGATGA", 
"CGAGTGCGGTGG", "TGGAGGTGTACT", "CTTCAATATTGA", "AACGACATAAAC", 
"TACAGTGGATGC", "ATCTAAGCTGTT", "GCCTGGCATCTT", "CATGGGGAACCT", 
"GCCCGAGCTAAG", "GGGTGCTCCGAC", "TAATTAGGACGC", "TACCTAAGCGAT", 
"TAGTCTGTAGGC", "CGTTAACTCCGC", "GCACGAAGTCAC", "GAGCGTCCAGCT", 
"CCGACTTACAAA", "CCGGTTCAGATG", "TGCAGCTGTGTG", "AATCTATTTCTT", 
"TCGTATAAGGTA", "AACTGGATGCCC", "ACGAAGAACGCT", "AGTGCTCTTCTG", 
"CTACAGTGTACA", "AGGGCCATACTC", "AACAACCGCTTA", "CTAGACGGCAAT", 
"GGGTTGAAGAAG", "GGAGCATACTAA", "CGAACCCCGGTA", "TGTACCATGGAA", 
"TTCGAGGTTGAT", "GTGCTTAGGATC", "CAACCGTATGAC", "GACGTCCTTCAG", 
"TGGTAATGGACA", "ACGAGCGCTATG", "GCGGAGCCACCC", "TCAGAGGCTGGA", 
"GGCCTTACGCAA", "TACGACCCATAG", "CCATTCAGCATG", "CCTAAGGGCCTT", 
"GGTCTATCGCAT", "CAGTACATGTCG")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -100L))

我已经尝试过 stringr 和 DNA 序列(猿)的特定包,但还没有很好的结果。

【问题讨论】:

    标签: r string dplyr stringr


    【解决方案1】:

    您可以使用grep

    grep("^[AT][CT]", s[,1])
    # [1]  1  5 11 12 13 14 18 20 21 22 33 36 49 50 51 60 75 77 87 92 94
    
    s[grep("^[AT][CT]", s[,1]), 1]
    # [1] "TCCGCTGGTGCG" "TTTCAGCGTCAG" "TCCCGTGCGCCC" "TCTCCCAAACGA" "ATCATGGTCAAC"
    # [6] "ACCGCACTGAAC" "ATGCGCGGCGAA" "ATGAGTAGTAGG" "TCTAGCGTCATT" "TCTCAACTTCTC"
    #[11] "TCATCACTATGA" "TTGGCCGAAATT" "ACAACGCCATGT" "ATATACTAAGCC" "ACCGGAATAGCT"
    #[16] "ATCTAAGCTGTT" "TCGTATAAGGTA" "ACGAAGAACGCT" "TTCGAGGTTGAT" "ACGAGCGCTATG"
    #[21] "TCAGAGGCTGGA"
    

    其中^表示字符串的开始,[AT]匹配AT[CT]匹配CT

    数据

    s <- structure(list(barcode.Universe.sub = c("TCCGCTGGTGCG", "GTCGCGGACTGC", 
    "CTTCCAAAATAG", "CCCCTTTCGTGG", "TTTCAGCGTCAG", "TACGAGCCTGGT", 
    "AGCAGTATCAAC", "TAACCGTATAGA", "GGCTAATTCCGC", "CTCGGTTGGGCG", 
    "TCCCGTGCGCCC", "TCTCCCAAACGA", "ATCATGGTCAAC", "ACCGCACTGAAC", 
    "AAGTTTTCCTCA", "CTAGAGACCGAT", "CATTCTCATGGA", "ATGCGCGGCGAA", 
    "GAGTGCCCTAGG", "ATGAGTAGTAGG", "TCTAGCGTCATT", "TCTCAACTTCTC", 
    "GAGAACGCTCCT", "TACAGGACACAC", "GATTCTCACGAT", "GAGACGGAGGCC", 
    "GCGGCTCCTCTA", "TGGATACTCTGC", "GCACCGCGTTCA", "GAATTGATAAGT", 
    "GGGCAGCAGATA", "GGCATATACGGC", "TCATCACTATGA", "CGCGGCTGGGAT", 
    "AGTCGCCACGCT", "TTGGCCGAAATT", "CGAGACCCACCG", "TGGTGCCTCACT", 
    "CTGATACTGGGT", "AGGTGGCGTCTA", "GGCAAGGAGTAC", "GCGACTGAAATA", 
    "AGCTTCGGATTA", "GTTGCCAGACTC", "AGCTGTCGCACG", "AGGGTTCGCTGT", 
    "GTGCGTACCGCG", "CGCTTACACATG", "ACAACGCCATGT", "ATATACTAAGCC", 
    "ACCGGAATAGCT", "CTACGAACGACT", "TAACCTTATGCT", "GCCTGCAGATGA", 
    "CGAGTGCGGTGG", "TGGAGGTGTACT", "CTTCAATATTGA", "AACGACATAAAC", 
    "TACAGTGGATGC", "ATCTAAGCTGTT", "GCCTGGCATCTT", "CATGGGGAACCT", 
    "GCCCGAGCTAAG", "GGGTGCTCCGAC", "TAATTAGGACGC", "TACCTAAGCGAT", 
    "TAGTCTGTAGGC", "CGTTAACTCCGC", "GCACGAAGTCAC", "GAGCGTCCAGCT", 
    "CCGACTTACAAA", "CCGGTTCAGATG", "TGCAGCTGTGTG", "AATCTATTTCTT", 
    "TCGTATAAGGTA", "AACTGGATGCCC", "ACGAAGAACGCT", "AGTGCTCTTCTG", 
    "CTACAGTGTACA", "AGGGCCATACTC", "AACAACCGCTTA", "CTAGACGGCAAT", 
    "GGGTTGAAGAAG", "GGAGCATACTAA", "CGAACCCCGGTA", "TGTACCATGGAA", 
    "TTCGAGGTTGAT", "GTGCTTAGGATC", "CAACCGTATGAC", "GACGTCCTTCAG", 
    "TGGTAATGGACA", "ACGAGCGCTATG", "GCGGAGCCACCC", "TCAGAGGCTGGA", 
    "GGCCTTACGCAA", "TACGACCCATAG", "CCATTCAGCATG", "CCTAAGGGCCTT", 
    "GGTCTATCGCAT", "CAGTACATGTCG")), class = c("tbl_df", "tbl", 
    "data.frame"), row.names = c(NA, -100L))
    

    【讨论】:

    • 非常感谢您的回答。有趣的是,我正在复制粘贴您的数据和代码,结果在 RStudio 中我只收到“整数(0)”。
    • 也许你在复制时犯了错误?哪个R版本?
    • 对不起,我刚刚编辑。当我在终端中执行它时,它工作得很好。谢谢!出于教育目的,您能否简要解释一下代码中的“[,1]), 1”是什么?
    • 您提供了一个 data.frame,然后我选择了包含该字符串的列。
    猜你喜欢
    • 2021-03-18
    • 2021-03-30
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2013-09-16
    • 2021-01-14
    • 2013-11-25
    相关资源
    最近更新 更多