选择在特定位置具有指定碱基的所有样本

问题描述

我是 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"),但我很挣扎。

提前致谢!

解决方法

最简单的方法是选择带有布尔索引的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"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...