我正在寻找一种R解决方案,以基于与单独文件(.csv)中标头ID列表的匹配从FASTA文件中提取多个序列。
我是R的新手,正试图找到一种方法: 取得包含将包含在fasta标头中的字符串的文件
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_ID(在.csv中)的序列,并丢弃其他我未提供的ID。谢谢
答案 0 :(得分:1)
您可以使用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