Индексы вхождений множественных групп в R - PullRequest
0 голосов
/ 05 мая 2018

У меня есть такая матрица:

enter image description here

structure(list(Gene_ID = structure(c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 2L), .Label = c("g1", "g10", "g2", "g3", "g4", "g5", "g6", "g7", "g8", "g9"), class = "factor"), Module_Color = structure(c(3L, 1L, 3L, 2L, 3L, 1L, 2L, 3L, 2L, 1L), .Label = c("blue", "green", "red"), class = "factor")), .Names = c("Gene_ID", "Module_Color"), class = "data.frame", row.names = c(NA, -10L))

Я хочу получить индексы строк вхождений всех разных цветов модулей и создать список «modIndices», который будет содержать индексы строк всех разных цветов модулей, например:

modIndices$red={1,3,5,8} 
#as red color appears in row 1,3,5 and 8.

modIndices$blue={2,6,10}

modIndices$green={4,7,9}

Хотя я могу получить индексы определенного цвета с помощью функции «which», я не могу создать приведенный выше список.

Пожалуйста, помогите ....

1 Ответ

0 голосов
/ 05 мая 2018

Мы можем просто split последовательность строк во втором столбце, чтобы получить list из vector индексов

split(seq_len(nrow(df)), df[[2]])

Или с помощью tidyverse создайте столбец последовательности с row_number(), сгруппированный по "Module Color", summarise, чтобы получить list из 'ind'

library(dplyr)
df %>% 
  mutate(rn = row_number()) %>% 
  group_by(`Module Color`) %>%
  summarise(ind = list(rn)) 

данные

df <- data.frame(`Gene ID` = paste0("g", 1:10), 
    `Module Color` = c('red', 'blue', 'red', 'green', 'red', 'blue', 
  'green', 'red', 'green', 'blue'),
    stringsAsFactors = FALSE, check.names = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...