You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:02:30