Я хотел бы объединить большой набор фреймов данных (около 30), каждый из которых имеет около 200 переменных.Эти наборы данных очень похожи, но не идентичны.
Ниже приведены два примера данных:
library(data.table)
library(haven)
df1 <- fread(
"A B C iso year
0 B 1 NLD 2009
1 A 2 NLD 2009
0 Y 3 AUS 2011
1 Q 4 AUS 2011
0 NA 7 NLD 2008
1 0 1 NLD 2008
0 1 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
)
Чтобы воссоздать ошибку:
class(df2$B) <- "anything"
Когда я делаюследующие
df_merged <- rbindlist(list(df1, df2), fill=TRUE, use.names=TRUE)
Набор данных выдает ошибку:
Error in rbindlist(list(df1, df2), fill = TRUE, use.names = TRUE) :
Class attribute on column 2 of item 2 does not match with column 2 of item 1.
Что я могу сделать для:
- Сделать
rbindlist
пропустить столбец, который делаетне совпадают и добавляют суффикс. - Измените класс одного столбца на другой.
Желаемый результат для варианта 1:
df_merged <- fread(
"A B B.x C D E iso year
0 A NA 1 NA NA NLD 2009
1 Y NA 2 NA NA NLD 2009
0 Q NA 3 NA NA AUS 2011
1 NA NA 4 NA NA AUS 2011
0 0 NA 7 NA NA NLD 2008
1 1 NA 1 NA NA NLD 2008
0 1 NA 3 NA NA AUS 2012
0 NA 1 NA 1 NA ECU 2009
1 NA 0 NA 2 0 ECU 2009
0 NA 0 NA 3 0 BRA 2011
1 NA 0 NA 4 0 BRA 2011
0 NA 1 NA 7 NA ECU 2008
1 NA 0 NA 1 0 ECU 2008
0 NA 0 NA 3 2 BRA 2012
1 NA 0 NA 4 NA BRA 2012",
header = TRUE
)
Желаемый результат для варианта 2:
df_merged <- fread(
"A B C D E iso year
0 3 1 NA NA NLD 2009
1 4 2 NA NA NLD 2009
0 5 3 NA NA AUS 2011
1 5 4 NA NA AUS 2011
0 0 7 NA NA NLD 2008
1 1 1 NA NA NLD 2008
0 1 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
)