我想合并大约27个不同的数据集。对于每个这些数据集,都有许多相同的列,但也有许多不相同的列。我希望将相同的列“堆栈”起来,而只需添加不相同的列即可。
让我们假设数据集1和2如下所示:
library(data.table)
df1 <- fread(
"A B C iso year
0 1 1 NLD 2009
1 0 2 NLD 2009
0 0 3 AUS 2011
1 0 4 AUS 2011
0 1 7 NLD 2008
1 0 1 NLD 2008
0 0 3 AUS 2012",
header = TRUE
)
df2 <- fread(
"A B D E iso year
0 1 1 NA ECU 2009
1 0 2 0 ECU 2009
0 0 3 0 BRA 2011
1 0 4 0 BRA 2011
0 1 7 NA ECU 2008
1 0 1 0 ECU 2008
0 0 3 2 BRA 2012
1 0 4 NA BRA 2012",
header = TRUE
)
我现在想将这些df与:
rbind(df1, df2, fill=TRUE)
合并的数据集应如下所示:
df_merged <- fread(
"A B C D E iso year
0 1 1 NA NA NLD 2009
1 0 2 NA NA NLD 2009
0 0 3 NA NA AUS 2011
1 0 4 NA NA AUS 2011
0 1 7 NA NA NLD 2008
1 0 1 NA NA NLD 2008
0 0 3 NA NA AUS 2012
0 1 NA 1 NA ECU 2009
1 0 NA 2 0 ECU 2009
0 0 NA 3 0 BRA 2011
1 0 NA 4 0 BRA 2011
0 1 NA 7 NA ECU 2008
1 0 NA 1 0 ECU 2008
0 0 NA 3 2 BRA 2012
1 0 NA 4 NA BRA 2012",",
header = TRUE
)
但是由于某些原因,将其应用于实际数据时出现错误:
Error in rbind(deparse.level, ...) :
numbers of columns of arguments do not match
我试图在示例中重新创建错误(通过使df的列和行的数量不同),但未能做到。
有什么想法吗?
编辑:显然,问题是我的两个数据集中的类在某些情况下列名不同。我将在工作后发布更新。
答案 0 :(得分:2)
您可以使用rbindlist
,即
library(data.table)
rbindlist(list(df1, df2), fill = TRUE)
答案 1 :(得分:1)
您还可以使用bind_rows
软件包中的dplyr
功能-
> bind_rows(df1,df2)
A B C iso year D E
1: 0 1 1 NLD 2009 NA NA
2: 1 0 2 NLD 2009 NA NA
3: 0 0 3 AUS 2011 NA NA
4: 1 0 4 AUS 2011 NA NA
5: 0 1 7 NLD 2008 NA NA
6: 1 0 1 NLD 2008 NA NA
7: 0 0 3 AUS 2012 NA NA
8: 0 1 NA ECU 2009 1 NA
9: 1 0 NA ECU 2009 2 0
10: 0 0 NA BRA 2011 3 0
11: 1 0 NA BRA 2011 4 0
12: 0 1 NA ECU 2008 7 NA
13: 1 0 NA ECU 2008 1 0
14: 0 0 NA BRA 2012 3 2
15: 1 0 NA BRA 2012 4 NA