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

时间:2019-01-25 06:20:13

标签: r dataframe fasta

我正在寻找一种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。谢谢

1 个答案:

答案 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