R - Как извлечь уникальные пересечения между группами в двоичной матрице? - PullRequest
0 голосов
/ 06 марта 2019

Уважаемые пользователи Stackoverflow,

Я новичок в использовании языка R для анализа биологических данных и столкнулся с проблемой, которую я пока не смог решить - может быть, кто-то более опытный можетпомочь мне в этом?

У меня большой фрейм данных, представляющий собой двоичную матрицу.каждый ряд представляет отдельный ген;у каждого столбца свое условие в эксперименте.

«1» в клетке означает, что ген присутствует в данном состоянии, «0» означает, что гена нет.

Как получить вектор с именами строк, содержащих только «1» в данном столбце, но без другого столбца (т. Е. Генов, которые уникально присутствуют в этом состоянии?)

И как я могу получить вектор с именами строк из строк, которые содержат «1» в указанном наборе столбцов, но «0» во всех других столбцах (то есть, гены, которые уникально присутствуют в условиях / столбцах 1,2 и 5например?

Я с нетерпением жду ваших предложений!

Большое спасибо: -)

1 Ответ

0 голосов
/ 06 марта 2019

здесь есть возможность использования пакета 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, а остальные столбцы равны нулю. Это можно сделать так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...