Преобразовать data.frame в список символов на основе одного из столбцов dataframe с помощью R - PullRequest
2 голосов
/ 21 апреля 2020

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

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

Compound_name Compound_type
A             Inhibitor_A
B             Inhibitor_B
C             Inhibitor_A
D             Inhibitor_C
E             Inhibitor_B

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

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

Мой data.frame содержит 2000 соединений, поэтому мне нужно способ сделать это итеративно.

Я не знаю, с чего начать, поэтому большое спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 21 апреля 2020

Вы можете использовать split, например:

split(x$Compound_name, x$Compound_type)
#$Inhibitor_A
#[1] "A" "C"
#
#$Inhibitor_B
#[1] "B" "E"
#
#$Inhibitor_C
#[1] "D"

Данные:

x <- structure(list(Compound_name = c("A", "B", "C", "D", "E"), Compound_type = c("Inhibitor_A", 
"Inhibitor_B", "Inhibitor_A", "Inhibitor_C", "Inhibitor_B")), class = "data.frame", row.names = c(NA, 
-5L))
1 голос
/ 21 апреля 2020

Другой вариант base R - unstack

unstack(x, Compound_name ~ Compound_type)
#$Inhibitor_A
#[1] "A" "C"

#$Inhibitor_B
#[1] "B" "E"

#$Inhibitor_C
#[1] "D"

data

x <- structure(list(Compound_name = c("A", "B", "C", "D", "E"), 
  Compound_type = c("Inhibitor_A", 
"Inhibitor_B", "Inhibitor_A", "Inhibitor_C", "Inhibitor_B")), 
 class = "data.frame", row.names = c(NA, 
-5L))
0 голосов
/ 21 апреля 2020
library(data.table)
d <- data.table( name = sample(letters, 100, replace = T),
                 type= paste0("in_" ,sample(letters[1:5], replace = T)))

d <- unique(d)

dd <- d[, .(gg = list(name)), by=type]

dd
   type              gg
1: in_a p,o,b,w,h,x,...
2: in_d t,p,w,q,j,n,...
3: in_c o,b,g,k,m,a,...
4: in_b b,u,e,y,r,i,...
5: in_e w,m,n,g,s,t,...

str(dd)
Classes ‘data.table’ and 'data.frame':  5 obs. of  2 variables:
 $ type: chr  "in_a" "in_d" "in_c" "in_b" ...
 $ gg  :List of 5
  ..$ : chr  "p" "o" "b" "w" ...
  ..$ : chr  "t" "p" "w" "q" ...
  ..$ : chr  "o" "b" "g" "k" ...
  ..$ : chr  "b" "u" "e" "y" ...
  ..$ : chr  "w" "m" "n" "g" ...
 - attr(*, ".internal.selfref")=<externalptr> 

list <- dd$gg
names(list) <- dd$type
...