【问题标题】:Removing unwanted parts of strings in a list, and combining the pieces into a single string in R删除列表中不需要的字符串部分,并将这些部分组合成 R 中的单个字符串
【发布时间】:2021-10-14 13:14:44
【问题描述】:

我正在尝试获取字符串列表,删除除大写字母之外的所有内容,并输出没有任何空格或中断的字符串列表。

不幸的是,我一直在尝试使用 str_extract_all(),但是当原始字符串中包含非大写字母字符串元素时,它会将字符串的相关片段分隔为字符向量列表。

任何人都可以提出一种获得所需输出的方法吗?

# Some example data:
a <- list("n[28.0313]MVNNGHSFNVEYDDSQDK[28.0313]AVLK[28.0313]D_+4", 
          "SLGKVGTRC[71.0371]CTK[28.0313]PESER_+4",
          "n[28.0313]AVVQDPALK[28.0313]PLALVY_+3",
          "n[28.0313]TCVADESHAGC[71.0371]EK[28.0313]_+2")

# The desired output:
list("MVNNGHSFNVEYDDSQDKAVLKD", 
          "SLGKVGTRCCTKPESER",
          "AVVQDPALKPLALVY",
          "TCVADESHAGCEK")

# What I've tried so far:
a %>% str_extract_all("[A-Z]+")

[[1]]
[1] "MVNNGHSFNVEYDDSQDK" "AVLK"               "D"                 
[[2]]
[1] "SLGKVGTRC" "CTK"       "PESER"    
[[3]]
[1] "AVVQDPALK" "PLALVY"   
[[4]]
[1] "TCVADESHAGC" "EK"  

# Not what I want.

我需要找到一种方法来隔离字符串并将它们组合起来,但我的 R 知识已经有限。

【问题讨论】:

    标签: r string list


    【解决方案1】:

    由于它是多个元素的 list,我们可以通过循环 list 将其粘贴在一起

    library(dplyr)
    library(stringr)
    library(purrr)
    a %>%
          str_extract_all("[A-Z]+") %>%
          map_chr(str_c, collapse="")
    

    -输出

    [1] "MVNNGHSFNVEYDDSQDKAVLKD" "SLGKVGTRCCTKPESER"  
    [3] "AVVQDPALKPLALVY"         "TCVADESHAGCEK"          
    

    或者只使用gsub匹配除大写以外的所有字符并替换为空白

    gsub("[^A-Z]+", "", a)
    [1] "MVNNGHSFNVEYDDSQDKAVLKD" "SLGKVGTRCCTKPESER"       "AVVQDPALKPLALVY"         "TCVADESHAGCEK"   
    

    str_remove_all

    str_remove_all(a, "[^A-Z]+")
    [1] "MVNNGHSFNVEYDDSQDKAVLKD" "SLGKVGTRCCTKPESER"       "AVVQDPALKPLALVY"         "TCVADESHAGCEK"   
    

    输出是vector,我们可以将其包装在list

    list(str_remove_all(a, "[^A-Z]+"))
    

    【讨论】:

    • 这对我的具体问题和学习非常有帮助。谢谢你。自从我发表文章以来,我一直在玩弄 str_c,但不知道如何将它迭代地应用于列表或向量,因为我从未听说过 map_chr 函数。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2022-01-25
    • 2013-05-17
    • 2023-01-30
    • 2020-11-16
    相关资源
    最近更新 更多