file1
国家 | 名称 | 种族 | >|||
---|---|---|---|---|---|
我们可以使用plyr::join_all
plyr::join_all(df_list, type = "full")
-输出
Country Name Race A B C D E F G H I
1 Rf wef wed 1 1 1 NA NA NA NA NA NA
2 Ew eggw qw 2 2 2 NA NA NA 4 11 8
3 Gw wef wed NA NA NA 3 5 7 NA NA NA
4 Wd eggw qw NA NA NA 4 6 8 NA NA NA
5 Qp wef wed NA NA NA NA NA NA 3 10 7
数据
df_list <- list(structure(list(Country = c("Rf", "Ew"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), A = 1:2, B = 1:2, C = 1:2), class = "data.frame", row.names = c(NA,
-2L)), structure(list(Country = c("Gw", "Wd"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), D = 3:4, E = 5:6, F = 7:8), row.names = c(NA,
-2L), class = "data.frame"), structure(list(Country = c("Qp",
"Ew"), Name = c("wef", "eggw"), Race = c("wed", "qw"), G = 3:4,
H = 10:11, I = 7:8), row.names = c(NA, -2L), class = "data.frame"))
full_join()
有一个参数suffix
,可以将其设置为空字符串来实现这一点。
data <-df.list %>% reduce(full_join, by=c("Country", "Name", "Race"), suffix=c("",""))
加入数据帧列表的基本R备选方案。
示例
df_list
[[1]]
Country Name Race A B C
1 Rf wef wed 1 1 1
2 Ew eggw qw 2 2 2
[[2]]
Country Name Race D E F
1 Gw wef wed 3 5 7
2 Wd eggw qw 4 6 8
[[3]]
Country Name Race G H I
1 Qp wef wed 3 10 7
2 Ew eggw qw 4 11 8
功能
join_list <- function(x, ax = T, ay = F){
dff <- merge(x[[1]], x[[2]], all.x=ax, all.y=ay)
if(length(x) > 2){
for(i in seq_along(x)[3:length(x)]){
dff <- merge(dff, x[[i]], all.x=ax, all.y=ay)
}}; dff }
使用
join_list(df_list, ax=T, ay=T)
Country Name Race A B C D E F G H I
1 Ew eggw qw 2 2 2 NA NA NA 4 11 8
2 Gw wef wed NA NA NA 3 5 7 NA NA NA
3 Qp wef wed NA NA NA NA NA NA 3 10 7
4 Rf wef wed 1 1 1 NA NA NA NA NA NA
5 Wd eggw qw NA NA NA 4 6 8 NA NA NA
数据
df_list <- list(structure(list(Country = c("Rf", "Ew"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), A = 1:2, B = 1:2, C = 1:2), class = "data.frame", row.names = c(NA,
-2L)), structure(list(Country = c("Gw", "Wd"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), D = 3:4, E = 5:6, F = 7:8), row.names = c(NA,
-2L), class = "data.frame"), structure(list(Country = c("Qp",
"Ew"), Name = c("wef", "eggw"), Race = c("wed", "qw"), G = 3:4,
H = 10:11, I = 7:8), row.names = c(NA, -2L), class = "data.frame"))