如何根据 CSV 格式的名称列表从 FASTA 文件中 select 基因?

How to select genes from FASTA file based on names list in CSV format?

我正在寻找一种 R 解决方案,根据与单独文件 (.csv) 中的 header ID 列表的匹配,从 FASTA 文件中提取多个序列。

我是 R 的新手,正在尝试找到一种方法来: 获取一个包含将在 fasta headers

中的字符串的文件

header_ID_strings 文件如下所示: CAP357_2030、CAP357、CAP3571等...

我的 fasta 文件示例如下所示:

CAP357_2030
GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGG
CAP357
GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT
CAP3571
GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT
CAP357_2040_011wpi_v1v3_1_004_00001_000.2
GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT
CAP357_2050_013wpi_v1v3_1_047_00002_000.4
GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT

我希望新 FASTA 文件的输出只包含 header_IDs 的序列(在 .csv 中)并丢弃其他我没有提供的 ID。谢谢

您可以使用 filter%in%:

将向量与选项列表进行比较
library(dplyr)

dat <- "CAP357_2030 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGG CAP357 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT CAP3571 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT CAP357_2040_011wpi_v1v3_1_004_00001_000.2 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT CAP357_2050_013wpi_v1v3_1_047_00002_000.4 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT"
ids_in_file <- c("CAP357_2030", "CAP357_2050_013wpi_v1v3_1_047_00002_000.4")

vec <- strsplit(dat, " ")[[1]]
df <- tibble(header_id_strings = vec[seq(1, length(vec),2)],
             sequence = vec[seq(2, length(vec),2)])

df %>%
  filter(header_id_strings %in% ids_in_file) %>%
  apply(1, paste, collapse = " ") %>%
  paste(collapse = "\n") %>%
  cat()

给出:

CAP357_2030 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGG
CAP357_2050_013wpi_v1v3_1_047_00002_000.4 GTAAAATTAACCCCACTCTGTGTCACTCTAAATTGTACAACTGCAAAGGGT