将不同列表的子列表组合到数据帧列表中

MAX*_*ess 6 r list dataframe

我有大量的列表,每个列表都包含许多子列表.每个列表都包含一个子列表,其中每个子列表在不同列表中具有相同的名称和观察数量.

这是一个简单的数据示例:

score <- list(Bob = list(c('1'), ('0')), Jane = list(c('1'), ('2'), ('4'), ('2')))
comments <- list(Bob = list(c('AAA'), ('BBB')), Jane = list(c('ZZZ'), ('XXX'), ('YYY'), ('QQQ')))
Run Code Online (Sandbox Code Playgroud)

我希望创建一个数据框列表,将子列表组合在一起并保留名称.

my.list.Bob
score   comments  
1    AAA  
0    BBB

my.list.Jane  
score   comments  
1    ZZZ  
2    XXX  
4    YYY  
2    QQQ  
Run Code Online (Sandbox Code Playgroud)

jaz*_*rro 3

这是适合您的一种方法。如果您的全局环境中有所有列表,则可以执行以下操作。首先,您创建一个包含您拥有的所有列表的列表。然后,您可以使用transpose()它为每个人创建一个列表(例如,包含分数和评论的 Bob 列表)。在本例中,每个列表中的评论和分数都是嵌套列表。您想要在每个列表中取消列出它们。因此,您可以使用rapply2()rawr。最后,您为每个列表创建一个数据框。

library(magrittr)
library(purrr)
library(rawr) #devtools::install_github('raredd/rawr')

score <- list(Bob = list(c('1'), ('0')), Jane = list(c('1'), ('2'), ('4'), ('2')))
comments <- list(Bob = list(c('AAA'), ('BBB')), Jane = list(c('ZZZ'), ('XXX'), ('YYY'), ('QQQ')))

# Get all objects in the global environment and create a list.
mylist <- mget(ls(pattern =  ".*"))

purrr::transpose(mylist) %>%
rapply2(unlist, classes = "list") %>%
lapply(as.data.frame, stringsAsFactors = FALSE)

$Bob
  comments score
1      AAA     1
2      BBB     0

$Jane
  comments score
1      ZZZ     1
2      XXX     2
3      YYY     4
4      QQQ     2
Run Code Online (Sandbox Code Playgroud)