Объединение двух наборов данных на основе несовместимых имен столбцов - PullRequest
0 голосов
/ 20 октября 2018

Мне интересно, какой самый экономный способ объединить наборы данных, основанные на несовместимых столбцах.

> head(team_measures)
# A tibble: 6 x 7
   team_id geo_entropy job_entropy
   <chr>         <dbl>       <dbl>
 1 10012         1.79        1.79 
 2 10027         0           1.25 
 3 10044         1.79        0.650
 4 10049         1.00        1.46 
 5 10053         0.811       2.00 


> head(p_calc)
# A tibble: 6 x 2
  team.id              p_average
    <int>                <dbl>
1   10000                 4.75
2   10001                 4.98
3   10002                 4.17
4   10003                 4.32
5   10004                 4.22
6   10005                 4.44

В настоящее время я делаю то, что кажется очень затруднительным для такой простой процедуры:

team_measures <- p_calc %>%
  rename(team_id = team.id) %>%
  select(team_id, p_average) %>%
  left_join(team_measures, by = c('team_id')) %>%
  na.omit()

Это на самом деле хуже, чем это, так как я получаю сообщение об ошибке:

Error in left_join_impl(x, y, by_x, by_y, aux_x, aux_y, na_matches) : 
  Can't join on 'team_id' x 'team_id' because of incompatible types (character / integer)

Так что я должен преобразовать их в тот же тип.

Есть ли более простой способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Это то, что вы пытаетесь достичь?

Объединения dplyr имеют аргумент by= с синтаксисом, который не очень интуитивно понятен, как by = c("xxx" = "xxxx")

 full_join(team_measures, p_cal, by = c("team_id" = "team.id") )

   team_id geo_entropy job_entropy p_average
1    10012       1.790        1.79        NA
2    10027       0.000        1.25        NA
3    10044       1.790        0.65        NA
4    10049       1.000        1.46        NA
5    10053       0.811        2.00        NA
6    10000          NA          NA      4.75
7    10001          NA          NA      4.98
8    10002          NA          NA      4.17
9    10003          NA          NA      4.32
10   10004          NA          NA      4.22
11   10005          NA          NA      4.44
0 голосов
/ 20 октября 2018

Просто измените свой номер на символ

library(tidyverse)
 data.frame(team_id = c("10012", '10027', '10044', '10049','10053'),
       geo_entropy = c(1.79,0,1.79,1.00,0.811),
       job_entropy = c(1.79,1.25,0.650,1.46,2.00)) -> team_measures

data.frame(team.id = 10000:10005,
           p_average = c(4.75,4.98,4.17,4.32,4.22,4.44)) -> p_calc



p_calc %>% 
  mutate(team.id = as.character(team.id)) %>% 
  rename(team_id = team.id) %>% 
  left_join(team_measures)

Хотя это даст вам NA для geo_entropy и job_entropy, поскольку ни одно из ваших значений team_id не совпадает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...