Как добавить столбцы из другого фрейма данных, где есть несколько совпадающих строк - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в R и застрял.

Внимание! Извините, я не смог понять, как добавить более 1 пробела между числами и заголовками в моем примере, поэтому я использовал вместо него "_".

Проблема:

У меня есть два данных кадры (выпускные и занятия). Я хочу сопоставить профессии с выпускными. Сложность в том, что один человек может присутствовать несколько раз в обоих фреймах данных, и я хочу сохранить все данные.

Пример:

Выпускной

Один человек, возможно, закончил много учебных программ. Исходный DF имеет больше столбцов, но они не имеют отношения к примеру.

Person_ID__curriculum_ID__School ID ___1___________100__________10 ___2___________100__________10 ___2___________200__________10 ___3___________300__________12 ___4___________100__________10 ___4___________200__________12

Занятия

Не у всех выпускников есть рабочие места, у всех в DF должна быть только одна основная работа (код JOB_Type "1") и может быть 0-5 дополнительных работ (код JOB_Type "0") ). Оригинальный DF имеет больше столбцов, но в настоящее время они не актуальны.

Person_ID ___ JOB_ID_____JOB_Type ___1_________1223________1 ___3_________3334________1 ___3_________2120________0 ___3_________7843________0 ___4_________4522________0 ___4_________1240________1

Конечный результат:

Новый DF с именем "Result", содержащий информацию обо всех выпускных программах первого DF (Graduations) и добавленные столбцы из второго DF (Occupations).

Обратите внимание, что человек "2" не в профессии DF. Их данные остаются, но добавленные столбцы остаются пустыми.

Обратите внимание, что у человека "3" есть несколько заданий, и поэтому добавляются лишние повторяющиеся строки.

Обратите внимание, что в случае с человеком "4" оба имеют несколько задания и выпускные, поэтому были добавлены дополнительные строки, чтобы соответствовать всем данным.

Новый DF: "Результат" Person_ID__Curriculum_ID__School_ID___JOB_ID____JOB_Type ___1___________100__________10_________1223________1 ___2___________100__________10 ___2___________200__________10 ___3___________300__________12_________3334________1 ___3___________300__________12_________2122________0 ___3___________300__________12_________7843________0 ___4___________100__________10_________4522________0 ___4___________100__________10_________1240________1 ___4___________200__________12_________4522________0 ___4___________200__________12_________1240________1

Для меня самое сложное - как заставить R добавить дополнительные дублирующиеся строки. Я посмотрел вокруг, чтобы найти пример или учебник о чем-то похожем, но мог. Вероятно, я не использовал правильные ключевые слова.

Буду очень признателен, если вы приведете примеры того, как его кодировать.

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Опция с left_join

library(dplyr)
left_join(Graduations, Occupations)
1 голос
/ 14 апреля 2020

Вы можете использовать merge, например:

merge(Graduations, Occupations, all.x=TRUE)
#   Person_ID curriculum_ID School_ID JOB_ID JOB_Type
#1          1           100        10   1223        1
#2          2           100        10     NA       NA
#3          2           200        10     NA       NA
#4          3           300        12   3334        1
#5          3           300        12   2122        0
#6          3           300        12   7843        0
#7          4           100        10   4522        0
#8          4           100        10   1240        1
#9          4           200        12   4522        0
#10         4           200        12   1240        1

Данные:

Graduations  <- read.table(header=TRUE, text="Person_ID  curriculum_ID School_ID
   1           100          10
   2           100          10
   2           200          10
   3           300          12
   4           100          10
   4           200          12")

Occupations  <- read.table(header=TRUE, text="Person_ID   JOB_ID    JOB_Type
   1         1223        1
   3         3334        1
   3         2122        0
   3         7843        0
   4         4522        0
   4         1240        1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...