如何从R中的嵌套列表中提取元素

时间:2019-11-03 04:11:37

标签: r tidyverse nested-lists

我正在处理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 个答案:

答案 0 :(得分:2)

我认为有更好的方法,但这是我目前可以做的。对于每一行,我提取字符串并将其与toString()串联在一起。由于unnest()为每一行创建多行(即x中的1、2和3),因此我使用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           

答案 1 :(得分:0)

如果名称与示例中的名称一致,则可以执行以下操作:

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