R-如何提取二进制矩阵中各组之间的唯一交集?

时间:2019-03-06 12:33:22

标签: r data-manipulation binary-matrix

尊敬的Stackoverflow用户,

我是使用R语言进行生物学数据分析的初学者,并且遇到了一个我尚无法解决的问题-也许更有经验的人可以帮助我解决这一问题?

我有一个很大的数据帧,它是一个二进制矩阵。 每行代表一个不同的基因;实验中每列的条件不同。

细胞中的

“ 1”表示基因在给定条件下存在, “ 0”表示该基因不存在。

如何获取仅在给定列中包含“ 1”的行的行名的向量,而在其他列中没有(即在该条件下唯一存在的基因?)

如何获得一个向量,其行的行名在指定的一组列中包含“ 1”,而在所有其他列中包含“ 0”(即,在条件/列1,2和例如5?

我期待您的建议!

非常感谢:-)

1 个答案:

答案 0 :(得分:0)

这里可能使用tidyverse软件包。 由于您未提供任何数据,因此我创建了一些虚拟数据,如下所示:

编辑:我加入了行名

> mydata
      A B C D E
id_1 0 1 1 0 0
id_2 0 1 0 1 0
id_3 1 1 1 1 0
id_4 1 0 0 0 0
id_5 0 0 1 1 1
id_6 1 0 1 0 0

所以我有六行(名为id_1到id_6),其中5列名为A到E。

说我要过滤“ B”和“ D”等于1且其他列等于0的所有行。 可以这样做:

library(tidyverse)
mydata %>% as_tibble(rownames = "id") %>% 
  filter_at(vars(c("B", "D")), all_vars(. == 1)) %>% 
  filter_at(vars(-c("B", "D", "id")), all_vars(. == 0))

# A tibble: 1 x 6
  id        A     B     C     D     E
  <chr> <int> <int> <int> <int> <int>
1 id_2     0     1     0     1     0