Как превратить список в datafame (по идентификатору)? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть список векторов, и я хочу объединить их, соответствующие идентификатору, в новый фрейм данных.

Вы можете воссоздать мою проблему, используя этот код:

library(rentrez)
clinvar_search <- entrez_search(db = "clinvar", term = "BRCA1")
clinvar_summary <- entrez_summary(db = "clinvar", id = clinvar_search$ids)

myfunc <- function(a){
    temp_col = sapply(data_summaries, "[[", a) %>% as.data.frame()
    return(temp_col)
}

mylist <- c(
    "uid",
    "obj_type")

brca1 = map(mylist,myfunc)

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

[[1]]
            .
815673 815673
813277 813277
686858 686858
601778 601778
601777 601777
601776 601776
564136 564136
443977 443977
442989 442989
442718 442718
397361 397361
395470 395470
155306 155306
149176 149176
149167 149167
146230 146230
144518 144518
144379 144379
58526   58526
58525   58525

[[2]]
                      .
815673 copy number gain
813277 copy number loss
686858 copy number loss
601778 copy number gain
601777 copy number gain
601776 copy number gain
564136 copy number loss
443977 copy number gain
442989 copy number loss
442718 copy number gain
397361 copy number gain
395470 copy number gain
155306 copy number gain
149176 copy number gain
149167 copy number gain
146230 copy number gain
144518 copy number gain
144379 copy number gain
58526  copy number gain
58525  copy number gain

Как мне преобразовать его в фрейм данных, где ему соответствуют идентификаторы в левом столбце?

Желаемый фрейм данных:

         col1                col2
815673 815673    copy number gain
813277 813277    copy number loss
686858 686858    copy number loss
601778 601778    copy number gain
601777 601777    copy number gain
601776 601776    copy number gain
564136 564136    copy number loss
443977 443977    copy number gain
442989 442989    copy number loss
442718 442718    copy number gain
397361 397361    copy number gain
395470 395470    copy number gain
155306 155306    copy number gain
149176 149176    copy number gain
149167 149167    copy number gain
146230 146230    copy number gain
144518 144518    copy number gain
144379 144379    copy number gain
58526   58526    copy number gain
58525   58525    copy number gain

РЕДАКТИРОВАТЬ:

Если приведенный выше код не работает:

list(structure(list(. = c("815673", "813277", "686858", "601778", 
"601777", "601776", "564136", "443977", "442989", "442718", "397361", 
"395470", "155306", "149176", "149167", "146230", "144518", "144379", 
"58526", "58525")), row.names = c("815673", "813277", "686858", 
"601778", "601777", "601776", "564136", "443977", "442989", "442718", 
"397361", "395470", "155306", "149176", "149167", "146230", "144518", 
"144379", "58526", "58525"), class = "data.frame"), structure(list(
    . = c("copy number gain", "copy number loss", "copy number loss", 
    "copy number gain", "copy number gain", "copy number gain", 
    "copy number loss", "copy number gain", "copy number loss", 
    "copy number gain", "copy number gain", "copy number gain", 
    "copy number gain", "copy number gain", "copy number gain", 
    "copy number gain", "copy number gain", "copy number gain", 
    "copy number gain", "copy number gain")), row.names = c("815673", 
"813277", "686858", "601778", "601777", "601776", "564136", "443977", 
"442989", "442718", "397361", "395470", "155306", "149176", "149167", 
"146230", "144518", "144379", "58526", "58525"), class = "data.frame"))

1 Ответ

2 голосов
/ 09 апреля 2020

вы можете попробовать подход tidyverse & purrr, который объединяет не только два, но и несколько элементов списка по rowid:

library(tidyverse)
data %>% 
  map(rownames_to_column) %>%  
  reduce(left_join, by = c("rowname"))

Используя только базу R, вы можете попробовать

merge(data[[1]], data[[2]], by="row.names")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...