Как извлечь элементы из вложенного списка в R - PullRequest
2 голосов
/ 03 ноября 2019

Я работаю с данными JSON, которые я преобразовал в таблицу с некоторыми столбцами списка. Я пытаюсь извлечь полезную информацию из столбцов списка, но сталкиваюсь с проблемами. Если дан следующий набор данных -

mydf <-tibble( 
  x = c(1, 2, 3),
  y = list(list(list(id="id1", title="title1"), list(id="id11", title="title11")), 
           list(id="id2",title="title2"), 
           NULL)
)

Как я могу преобразовать его в следующий -

data.frame(x=c(1:3), id = c("id1;id11", "id2", ""), title = c("title1;title11", "title2", ""))

#  x       id          title
#1 1 id1;id11 title1;title11
#2 2      id2         title2
#3 3                        

Любая помощь приветствуется. Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Я думаю, что есть лучшие способы, но это то, что я могу сделать сейчас. Для каждой строки я извлекал строки и объединял их с toString(). Поскольку unnest() создает несколько строк для каждой строки (т. Е. 1, 2 и 3 в x), я использовал summarize() для временного объединения строк. Затем я разделяю их, используя separate().

mydf %>% 
unnest(y, keep_empty = TRUE) %>% 
rowwise %>% 
mutate(y = toString(unlist(y))) %>%
group_by(x) %>% 
summarize(string = paste(y, collapse = "_")) %>% 
separate(col = string, into = c("id", "title"), sep = "_")

#      x id          title        
#  <dbl> <chr>       <chr>        
#1     1 id1, title1 id11, title11
#2     2 id2         title2       
#3     3 ""          NA           
0 голосов
/ 03 ноября 2019

Если имена совпадают, как в примере, вы можете сделать:

mydf2 <- unlist(mydf)
x <- mydf2[grepl("x", names(mydf2))]
id <- mydf2[grepl("id", names(mydf2))]
title <- mydf2[grepl("title", names(mydf2))]
tibble(x, id, title)
# A tibble: 3 x 3
  x     id    title  
  <chr> <chr> <chr>  
1 1     id1   title1 
2 2     id11  title11
3 3     id2   title2 
...