我得到了一个具有统一 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

推荐答案

您可以在每个水果上叠加,将其绑定到数据框中:

fruits  <- c("apples", "mangoes")
out  <- lapply(fruits, \(fruit)
    dplyr::bind_rows(lapply(MyList, \(x) x[[fruit]]))
)  |> setNames(fruits)

identical(out, desired)
# [1] TRUE

R相关问答推荐

如何判断某列中由某些行组成的百分比

提取R中值和列名的所有可能组合

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

向gggplot 2中的数据和轴标签添加大写和星号

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

将非重复序列高效转换为长格式

如何将移除事件分配给动态创建的按钮?

R-更新面内部的栅格值

R Read.table函数无法对制表符分隔的数据正常工作

悬崖三角洲超大型群数计算导致整数溢出

KM估计的差异:SvyKm与带权重的调查

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

有没有办法一次粘贴所有列

使用列中的值来调用函数调用中应使用的其他列

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

如何将EC50值绘制在R中的剂量-react 曲线上?

R:如何在数据集中使用Apply

条形图中的条形图没有try 赋予它们的 colored颜色

R:水平旋转图