组合来自两个列表的数据框

我有两个数据框列表。在每个列表中,数据框都有一个具有相同名称和值的列。举个例子:

x <- list(data.frame(i=as.character(1:5),x=rnorm(5),z=rnorm(5)),
          data.frame(i=as.character(1:5),x=rnorm(5),z=rnorm(5)))

y <- list(data.frame(i=as.character(5:1),x1=rnorm(5),z1=rnorm(5)),
          data.frame(i=as.character(5:1),x1=rnorm(5),z1=rnorm(5)))

我想将两个列表合并为一个,以便新列表的每个元素都是一个包含以下列的数据框:) i, x, z, x1, z1。那就是我想要一个包含两个数据框的列表,每个数据框有五行和我提到的五列。我找不到解决方案(例如,找到了如何在一个 df 的列表中连接 dfs)。我想使用lapply并传递函数 merge( x,y, by= i),但我不知道第一个参数(即使用的数据)应该是什么。请注意公共列中的值的顺序不同(在示例中它们被颠倒但在我的数据中,它们是混合的。所以让我知道您的解决方案是否需要先订购该列。谢谢。

回答

library(tidyverse)
map2(x, y, ~left_join(.x, .y, by = 'i'))
#> [[1]]
#>   i          x         z         x1         z1
#> 1 1 -0.8773188  1.204293  1.2809946  0.9016632
#> 2 2 -0.4091583 -1.128325  0.7973242 -0.1010260
#> 3 3  1.3747095  0.784787 -1.6927698 -1.1568878
#> 4 4  0.7565917 -1.104594  1.0663122 -0.1439810
#> 5 5  0.9662782 -1.039493 -0.2620102 -0.4941850
#> 
#> [[2]]
#>   i         x          z         x1          z1
#> 1 1 0.7871544 -1.0974764  1.2926863  0.99399623
#> 2 2 1.3705341 -0.1047783  1.3612606 -0.01155390
#> 3 3 0.9984027 -0.2466980  0.4554107 -1.38307942
#> 4 4 0.7096952  0.7500738 -0.4586198  0.02311739
#> 5 5 0.1883204 -0.6399546  0.1496794 -0.43233764

它的 baseR 等价物

Map(function(.x, .y) merge(.x, .y, by = 'i'), x, y)
#> [[1]]
#>   i            x           z         x1         z1
#> 1 1  1.163081705  0.71855088  0.7981572  0.1029179
#> 2 2  0.876645119 -0.08615626  0.7299087  0.9782025
#> 3 3 -1.460452798 -0.14551233 -0.3380226 -1.1168602
#> 4 4 -0.004574267 -0.36117459  0.2183281 -0.9045827
#> 5 5 -0.836010524  0.12336598 -0.9046551 -0.2670896
#> 
#> [[2]]
#>   i          x          z          x1         z1
#> 1 1 -1.1605742  0.3233873 -0.16685367 -1.0579590
#> 2 2  1.5723944  0.5120253 -0.66373500  0.3241323
#> 3 3 -1.5562135  1.1251436  0.06805823 -2.2889400
#> 4 4  0.2782484  0.4134606 -0.11763939 -0.9060669
#> 5 5 -0.4821373 -0.7170258  0.72466946 -1.4457480

由reprex 包( v2.0.0 )于 2021 年 6 月 5 日创建


以上是组合来自两个列表的数据框的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>