Объединить два набора данных в группу для несуществующих значений - PullRequest
0 голосов
/ 31 марта 2020

Я построил двудольный график ie для идентификации схожих пользователей на основе их навыков и хотел бы рекомендовать конкретное c обучение для каждого из них.

Мой первый набор данных (давайте назовем его Набор данных A ) выглядит следующим образом:

UserID    Trainings
1         Speaking
1         Writing
1         Dancing
2         Writing
2         Dancing
2         Singing
2         Running
3         Speaking
3         Running

И мой Набор данных B , который содержит список всех похожих пользователей:

UserID      Similar_Users
1           2
1           5
1           6
2           4       

Что я хотел бы иметь набор данных со всеми недостающими тренингами на пользователя, основанный на тренингах их похожих пользователей. В моем примере это выглядело бы следующим образом:

UserID     Recommended_Trainings
1          Singing     
1          Running

Пение и бег, потому что на основе моего набора данных B пользователь 2 похож на пользователя 1, а в соответствии с набором данных A пользователь 1 еще не проходил эти тренинги .

Любая помощь будет принята с благодарностью.

Большое спасибо,

1 Ответ

1 голос
/ 31 марта 2020

Один из способов будет:

library(dplyr)

DatasetA %>%
  left_join(DatasetB, by = 'UserID') %>%
  left_join(DatasetA %>% rename(`Recommended trainings` = Trainings), by = c('Similar_Users' = 'UserID')) %>%
  group_by(UserID) %>%
  filter(!`Recommended trainings` %in% Trainings, !is.na(`Recommended trainings`)) %>%
  distinct(`Recommended trainings`)

Вывод:

# A tibble: 2 x 2
# Groups:   UserID [1]
  `Recommended trainings` UserID
  <fct>                    <int>
1 Singing                      1
2 Running                      1
...