【问题标题】:Select all samples with a specified base at a particular position在特定位置选择具有指定碱基的所有样本
【发布时间】:2020-12-30 16:05:01
【问题描述】:

我是 R 编程新手,并试图完成一项非常具体的任务。

我有一个包含 n 个样本的 fasta 序列,我在 ape 中读到:

library(ape)

matrix <- read.dna(myfasta, format="fasta", as.character=TRUE)

这创建了一个矩阵,如下所示:

|    | V1 | V2 | V3 | V4 |...
|------------------------|
|Seq1|  a |  t |  g |  c |...
|Seq2|  a |  t |  g |  a |...
|Seq3|  a |  t |  c |  c |...
|Seq4|  t |  t |  g |  a |...
|... |

其中 Seq(n) 是每个样本的 DNA 序列,V(n) 表示核苷酸位置。

如何选择在某个位置(例如“V1”)带有某个核苷酸(例如“a”)的序列,然后将这些序列作为连接字符串返回?

所以对于 V1 位置,我想要“Seq1, Seq2, Seq3”之类的东西,而对于 V4 位置,对于相同的碱基,我想要“Seq2, Seq4”

我尝试过which()filter(matrix, V1 == "a"),但我很挣扎。

提前致谢!

【问题讨论】:

    标签: r bioinformatics fasta phylogeny ape-phylo


    【解决方案1】:

    最简单的方法是选择带有布尔索引的V1 == 'a'行,然后提取rownames

    rownames(example[example[,"V1"] == "a", ]) # "No304" "No306"
    

    你提到了filter,它看起来像dplyr。使用 tidyverse 方法来操作对行名很重要的数据有点麻烦,因为默认情况下会删除行名。

    如果您想使用filter,您必须首先将行名保存为显式列:

    library(dplyr)
    
    as.data.frame(example) %>% 
      mutate(sequence = rownames(.), .before = everything()) %>% 
      filter(V1 == "a") %>% 
      select(sequence)
    
      sequence
    1    No304
    2    No306
    

    数据(来自ape read.dna docs

    library(ape)
    
    cat(">No305",
        "NTTCGAAAAACACACCCACTACTAAAANTTATCAGTCACT",
        ">No304",
        "ATTCGAAAAACACACCCACTACTAAAAATTATCAACCACT",
        ">No306",
        "ATTCGAAAAACACACCCACTACTAAAAATTATCAATCACT",
        file = "exdna.fas", sep = "\n")
    
    example <- read.dna("exdna.fas", format = "fasta", as.character = TRUE)
    colnames(example) <- paste0("V", 1:ncol(example))
    
    example
          V1  V2  V3  V4 ...
    No305 "n" "t" "t" "c"
    No304 "a" "t" "t" "c"
    No306 "a" "t" "t" "c"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2015-02-09
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2011-01-27
      相关资源
      最近更新 更多