如何在R中提取与主序列重叠后的非对齐子串并分组统计?
解决方案:提取子串中超出主序列的部分并统计次数
核心思路
通过stringr的字符串替换功能移除子串中与主序列完全匹配的部分,剩余内容即为超出主序列的片段,再用dplyr完成频次统计。
示例代码
library(tidyverse) # 定义主序列与子串集合 main_seq <- "cuggg" patterns <- c("cugggaaa", "xxxcuggg", "ggguuu", "cug", "abc", "xxcugggyyy", "cuggg", "ugggzz") # 处理并统计 result <- tibble(pattern = patterns) %>% # 移除子串中与主序列完全匹配的部分,得到超出内容 mutate(extra_part = str_replace(pattern, fixed(main_seq), "")) %>% # 过滤无超出内容的条目(按需保留或移除) filter(extra_part != "") %>% # 统计各超出部分的出现次数 count(extra_part, name = "occurrence_count") %>% # 按次数降序排列 arrange(desc(occurrence_count)) # 查看结果 print(result)
期望输出
# A tibble: 6 × 2 extra_part occurrence_count <chr> <int> 1 aaa 1 2 xxx 1 3 uuu 1 4 abc 1 5 xxyyy 1 6 uggzz 1
细节说明
- 使用
fixed(main_seq)确保字符串按字面匹配,避免正则表达式转义问题 filter(extra_part != "")可按需调整:若需保留完全匹配主序列或被主序列包含的子串(超出部分为空),删除该行即可- 若子串与主序列存在部分重叠(如
ugggzz),str_replace仅移除完全匹配的uggg片段,剩余内容即为超出部分
内容的提问来源于stack exchange,提问作者choij
相关产品推荐
相关产品推荐

