【问题标题】:Bind data frames from two nested lists by list and df names按列表和 df 名称绑定来自两个嵌套列表的数据框
【发布时间】:2022-08-23 23:54:08
【问题描述】:

我想通过名称绑定来自两个不同嵌套列表的 R 数据框,如下所示:


list1 = list(list_a = list(df1 = data.frame(letters = c(\'A\',\'B\',\'C\'),
                                            numbers = seq(1,3)),
                           
                           df2 = data.frame(letters = c(\'A\',\'B\',\'C\',\'D\',\'E\'),
                                            numbers = seq(1,5))),
             
             list_b = list(df3 = data.frame(norm = rnorm(4))))



list2 = list(list_a = list(df1 = data.frame(letters = c(\'D\',\'E\',\'F\'),
                                            numbers = seq(4,6)),
                           
                           df2 = data.frame(letters = c(\'F\',\'G\',\'H\',\'I\',\'J\'),
                                            numbers = seq(6,10))),
             
             list_b = list(df3 = data.frame(norm = rnorm(4))))

按名称绑定这两个列表后,我期望的结果是:

> list3
$list_a
$list_a$df1
  letters numbers
1       A       1
2       B       2
3       C       3
4       D       4
5       E       5
6       F       6

$list_a$df2
   letters numbers
1        A       1
2        B       2
3        C       3
4        D       4
5        E       5
6        F       6
7        G       7
8        H       8
9        I       9
10       J      10


$list_b
$list_b$df3
        norm
1  0.1400504
2 -0.5785170
3 -0.2905891
4  1.9175712
5  1.8736454
6 -0.4895259
7  0.5975914
8  0.3586774

因此,简而言之,我真正想做的是通过名称绑定这两个嵌套列表中的相应数据框。

有任何想法吗?

    标签: r list bind nested-lists


    【解决方案1】:

    假设list1list2 具有相互结构(相同的深度、列表名称、顺序),您可以使用嵌套的Map()

    Map(\(x, y) Map(rbind, x, y), list1, list2)
    
    $list_a
    $list_a$df1
      letters numbers
    1       A       1
    2       B       2
    3       C       3
    4       D       4
    5       E       5
    6       F       6
    
    $list_a$df2
       letters numbers
    1        A       1
    2        B       2
    3        C       3
    4        D       4
    5        E       5
    6        F       6
    7        G       7
    8        H       8
    9        I       9
    10       J      10
    
    
    $list_b
    $list_b$df3
            norm
    1  0.6370310
    2  0.3425583
    3 -0.8333353
    4  1.5825106
    5 -0.2551183
    6  1.1983533
    7 -1.0771730
    8 -1.1065747
    

    【讨论】:

    • tidyverse 备选:map2(list1, list2, ~ map2(.x, .y, bind_rows))
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多