Преобразовать data.frame в список символов на основе одного из столбцов dataframe, который содержит несколько символов, с R - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно преобразовать data.frame в список символов на основе одного из столбцов dataframe. Один из colmuns содержит несколько категорий внутри него.

Это похоже на предыдущий вопрос, который я задал ( Преобразование data.frame в список символов на основе одного из столбцов dataframe с R ), но на этот раз более сложный.

Начиная с двухкадровых данных data.frame, первый содержит уникальные значения имен соединений, а другой содержит категории составных типов, которые не являются уникальными , Пример из этого фрейма данных:

`x <- structure(list(Compound_name = c("A", "B", "C", "D", "E"), Compound_type = c("Inhibitor_A, Inhibitor_B", "Inhibitor_B", "Inhibitor_A, Inhibitor_C, Inhibitor_D", "Inhibitor_C", "Inhibitor_B")), class = "data.frame", row.names = c(NA, -5L))`

Я хотел бы получить список, который выглядит следующим образом:

Inhibitor_A   'A' 'C'
Inhibitor_B   'A' 'B' 'E'
Inhibitor_C   'C' 'D'
Inhibitor_D   'C'

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

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Один dplyr и tidyr параметр может быть:

x %>%
 separate_rows(Compound_type, sep = ", ") %>%
 group_by(Compound_type) %>%
 summarise(Compound_name = list(Compound_name))

  Compound_type Compound_name
  <chr>         <list>       
1 Inhibitor_A   <chr [2]>    
2 Inhibitor_B   <chr [3]>    
3 Inhibitor_C   <chr [2]>    
4 Inhibitor_D   <chr [1]> 
0 голосов
/ 22 апреля 2020

Мы можем использовать base R с strsplit

with(stack(setNames(strsplit(x$Compound_type, ",\\s*"),
        x$Compound_name)), split(as.character(ind), values))
...