Объединить несколько фреймов данных с частично совпадающими строками - PullRequest
0 голосов
/ 14 марта 2019

У меня есть фреймы данных со списками элементов, таких как NAMES.В данных есть разные имена, но большинство из них совпадают.Я хотел бы объединить их все в один список, в котором я бы посмотрел, отсутствуют ли какие-либо имена в любом из df.

Образец ДАННЫХ для df1:

  X                    x
1 1 rh_Structure/Focus_S
2 2 rh_Structure/Focus_C
3 3 lh_Structure/Focus_S
4 4 lh_Structure/Focus_C
5 5   RH_Type-Function-S
6 6        RH_REFERENT-S

и для df2

  X                    x
1 1 rh_Structure/Focus_S
2 2 rh_Structure/Focus_C
3 3 lh_Structure/Focus_S
4 4 lh_Structure/Focus_C
5 5            UCZESTNIK
6 6                COACH

и ожидаемый результат будет:

                  NAME. df1 df2
1                COACH  NA   6
2 lh_Structure/Focus_C   4   4
3 lh_Structure/Focus_S   3   3
4        RH_REFERENT-S   6  NA
5 rh_Structure/Focus_C   2   2
6 rh_Structure/Focus_S   1   1
7   RH_Type-Function-S   5  NA
8            UCZESTNIK  NA   5

Я могу сделатьчто с merge.data.frame (df1, df2, by = "x", all = T), но я не могу сделать это с большим количеством df с похожей структурой.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 14 марта 2019

Может быть проще работать с этим в длинной форме.Просто rbind все наборы данных ниже друг друга с флагом, для которого они были получены.Тогда сравнительно просто получить таблицу всех пропущенных значений (и в качестве дополнительного бонуса вы можете увидеть, есть ли у вас дубликаты в любом из исходных наборов данных):

dfs <- c("df1","df2")
dfall <- do.call(rbind, Map(cbind, mget(dfs), src=dfs))
table(dfall$x, dfall$src)

#                        df1 df2
#   COACH                  0   1
#   lh_Structure/Focus_C   1   1
#   lh_Structure/Focus_S   1   1
#   RH_REFERENT-S          1   0
#   rh_Structure/Focus_C   1   1
#   rh_Structure/Focus_S   1   1
#   RH_Type-Function-S     1   0
#   UCZESTNIK              0   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...