Как извлечь части списка с одинаковыми именами? - PullRequest
0 голосов
/ 25 мая 2020

Я хочу извлечь части списка, которые также являются списком, во фрейм данных, но части, которые мне нужны, имеют то же имя. Вот пример списка:

study <- list(type='RCT', samplesize=10, centre=list(date='10/2/2015', type='A'), centre=list(date='20/3/2015', type='C'))

Если я использую:

sapply('centre', function(x) unname(unlist(study[names(study)==x])), simplify=FALSE)

Тогда он будет представлен как вектор:

$centre
[1] "10/2/2015" "A"         "20/3/2015" "C"  

Я хочу:

centre date      type
1      10/2/2015 A
2      20/3/2015 C

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Если вы открыты для краткого решения tidyverse / purrr, мы можем использовать imap_dfr()

study %>% purrr::imap_dfr(~if(.y == "centre") .x)
#   A tibble: 2 x 2
#   date      type 
# * <chr>     <chr>
# 1 10/2/2015 A    
# 2 20/3/2015 C    
0 голосов
/ 25 мая 2020

Вы можете сначала задать подмножество имен списков с помощью 'centre', преобразовать его в фрейм данных и присвоить индекс строки.

data <- data.frame(t(sapply(study[names(study) == 'centre'], unlist)), 
                   row.names = NULL)
data$centre <- 1:nrow(data)

data
#       date type centre
#1 10/2/2015    A      1
#2 20/3/2015    C      2

Вы также можете получить data как:

data <- do.call(rbind.data.frame, study[names(study) == 'centre'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...