我得到了一个具有统一 struct 的列表:每个项目本身都是一个通常名称为data.frames的列表.我想在第二层中找到所有同名的项目,并使它们成为一个单一的data.frame.下面是一个示例列表:
MyList <- list("A" = list("apples" = data.frame(X = 1:5,
Source = "A"),
"mangoes" = data.frame(X = 1:5,
Source = "A")),
"B" = list("apples" = data.frame(X = 1:5,
Source = "B"),
"mangoes" = data.frame(X = 1:5,
Source = "B")),
"C" = list("apples" = data.frame(X = 1:5,
Source = "C"),
"mangoes" = data.frame(X = 1:5,
Source = "C")))
我想创建一个只有一个级别而不是两个级别的新列表,我需要所有的"苹果"都是一个数据框,所有的"芒果"都是一个数据框.它看起来是这样的:
MyNewList <- list("apples" = bind_rows(data.frame(X = 1:5,
Source = "A"),
data.frame(X = 1:5,
Source = "B"),
data.frame(X = 1:5,
Source = "C")),
"mangoes" = bind_rows(data.frame(X = 1:5,
Source = "A"),
data.frame(X = 1:5,
Source = "B"),
data.frame(X = 1:5,
Source = "C")))
这看起来像是一项映射或从Purrr中挑选出来的工作,但我总是发现那些语法令人困惑.以下是我try 过的:
试着把所有的"苹果"作为一个起点:
pluck(MyList, 1:3, "apples") # nope; index can't have length > 1
也许我可以申请一下商品的名称?
lapply(c("apples", "mangoes"),
FUN = function(x) pluck(MyList, x)) # all items are NULL
map_depth可以做到这一点?
map_depth(.x = MyList,
.depth = 2,
.f = bind_rows) # not at all what I want