如何根据 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
我正在寻找一种 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