如何基于公共列合并存储在多个列表中的多个 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
广告