如何基于公共列合并存储在多个列表中的多个 R 数据框?


要合并存储在多个列表中的多个 R 数据框,我们可以按照以下步骤操作:

  • 首先,创建两个数据框列表。
  • 然后,使用 purrr 包中的 map2_df 函数和 dplyr 包中的 inner_join 函数,基于公共列合并存储在列表中的数据框。

创建两个数据框列表

让我们创建如下所示的数据框:

 现场演示

df1<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y1=rpois(10,1),y2=rpois(10,4))
df2<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y3=rpois(10,2),y4=rpois(10,5))
df3<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y5=rpois(10,10),y6=rpois(10,1)
)
List1<-list(df1,df2,df3)
List1

执行上述脚本后,将生成以下输出(由于随机化,此输出在您的系统上会有所不同):

[[1]]
x y1 y2
1 C 0 3
2 D 0 1
3 A 1 6
4 C 2 1
5 B 1 7
6 A 1 5
7 D 0 1
8 E 1 5
9 B 3 1
10 B 2 7

[[2]]
x y3 y4
1 B 3 8
2 E 1 3
3 E 2 10
4 A 1 5
5 A 2 4
6 C 5 3
7 B 1 6
8 A 2 5
9 E 1 4
10 E 3 2

[[3]]
x y5 y6
1 A 12 0
2 E 10 3
3 D 11 0
4 A 11 2
5 C 6 1
6 E 9 1
7 B 11 3
8 E 9 0
9 E 6 0
10 B 11 1

再次,创建另一个数据框列表,如下所示:

 现场演示

df2<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y4=rpois(10,1),y5=rpois(10,4))
df3<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y2=rpois(10,5),y3=rpois(10,2))
df4<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y1=rpois(10,5),y2=rpois(10,1))
List2<-list(df2,df3,df4)
List2

执行上述脚本后,将生成以下输出(由于随机化,此输出在您的系统上会有所不同):

[[1]]
x y4 y5
1 C 1 4
2 A 4 6
3 B 1 3
4 A 2 2
5 A 2 1
6 A 1 6
7 A 0 7
8 C 1 4
9 B 1 9
10 A 2 4

[[2]]
x y2 y3
1 B 7 5
2 B 4 2
3 A 7 2
4 C 6 2
5 C 6 3
6 A 1 0
7 C 4 0
8 A 7 1
9 A 6 5
10 B 2 2

[[3]]
x y1 y2
1 C 7 0
2 A 5 1
3 C 5 0
4 B 9 1
5 B 7 1
6 B 4 0
7 C 2 2
8 C 5 1
9 A 5 0
10 A 7 0

基于公共列合并存储在多个列表中的多个数据框

加载 purrr 和 dplyr 包,然后使用 map2_df 函数和 inner_join 函数,基于公共列合并存储在列表中的数据框:

df1<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y1=rpois(10,1),y2=rpois(10,4))
df2<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y3=rpois(10,2),y4=rpois(10,5))
df3<-
data.frame(x=sample(LETTERS[1:5],10,replace=TRUE),y5=rpois(10,10),y6=rpois(10,1)
)
List1<-list(df1,df2,df3)
df2<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y4=rpois(10,1),y5=rpois(10,4))
df3<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y2=rpois(10,5),y3=rpois(10,2))
df4<-
data.frame(x=sample(LETTERS[1:3],10,replace=TRUE),y1=rpois(10,5),y2=rpois(10,1))
List2<-list(df2,df3,df4)
library(purrr)
library(dplyr)
map2_df(List1,List2,inner_join,by="x")

输出

x y1 y2 y4 y5 y3.x y3.y y6
1 C 0 3 1 4 NA NA NA
2 C 0 3 1 4 NA NA NA
3 A 1 6 4 6 NA NA NA
4 A 1 6 2 2 NA NA NA
5 A 1 6 2 1 NA NA NA
6 A 1 6 1 6 NA NA NA
7 A 1 6 0 7 NA NA NA
8 A 1 6 2 4 NA NA NA
9 C 2 1 1 4 NA NA NA
10 C 2 1 1 4 NA NA NA
11 B 1 7 1 3 NA NA NA
12 B 1 7 1 9 NA NA NA
13 A 1 5 4 6 NA NA NA
14 A 1 5 2 2 NA NA NA
15 A 1 5 2 1 NA NA NA
16 A 1 5 1 6 NA NA NA
17 A 1 5 0 7 NA NA NA
18 A 1 5 2 4 NA NA NA
19 B 3 1 1 3 NA NA NA
20 B 3 1 1 9 NA NA NA
21 B 2 7 1 3 NA NA NA
22 B 2 7 1 9 NA NA NA
23 B NA 7 8 NA 3 5 NA
24 B NA 4 8 NA 3 2 NA
25 B NA 2 8 NA 3 2 NA
26 A NA 7 5 NA 1 2 NA
27 A NA 1 5 NA 1 0 NA
28 A NA 7 5 NA 1 1 NA
29 A NA 6 5 NA 1 5 NA
30 A NA 7 4 NA 2 2 NA
31 A NA 1 4 NA 2 0 NA
32 A NA 7 4 NA 2 1 NA
33 A NA 6 4 NA 2 5 NA
34 C NA 6 3 NA 5 2 NA
35 C NA 6 3 NA 5 3 NA
36 C NA 4 3 NA 5 0 NA
37 B NA 7 6 NA 1 5 NA
38 B NA 4 6 NA 1 2 NA
39 B NA 2 6 NA 1 2 NA
40 A NA 7 5 NA 2 2 NA
41 A NA 1 5 NA 2 0 NA
42 A NA 7 5 NA 2 1 NA
43 A NA 6 5 NA 2 5 NA
44 A 5 1 NA 12 NA NA 0
45 A 5 0 NA 12 NA NA 0
46 A 7 0 NA 12 NA NA 0
47 A 5 1 NA 11 NA NA 2
48 A 5 0 NA 11 NA NA 2
49 A 7 0 NA 11 NA NA 2
50 C 7 0 NA 6 NA NA 1
51 C 5 0 NA 6 NA NA 1
52 C 2 2 NA 6 NA NA 1
53 C 5 1 NA 6 NA NA 1
54 B 9 1 NA 11 NA NA 3
55 B 7 1 NA 11 NA NA 3
56 B 4 0 NA 11 NA NA 3
57 B 9 1 NA 11 NA NA 1
58 B 7 1 NA 11 NA NA 1
59 B 4 0 NA 11 NA NA 1

更新于: 2021年8月13日

394 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告