Есть ли способ прочитать / импортировать значения данных из одного df во второй df на основе имени наблюдения? - PullRequest
0 голосов
/ 07 мая 2019

epl_schedule_df

epl_ratings_df

У меня есть df с рейтингами английской премьер-лиги и еще один df с полным графиком сезона.Я хотел бы иметь возможность прикрепить к графику рейтинг каждой команды в качестве переменной, чтобы я мог получить вероятности для каждой игры.Шаг спустя будет симулировать весь сезон.

Я попытался написать оператор if для сопоставления строк символов от df_1 до df_2, но я не верю, что я на правильном пути.

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

vec_1 <- c("team_a", "team_b", "team_c")
vec_2 <- c(1.7, 1.2, 0.8)
vec_3 <- c("team_d", "team_e", "team_f")
vec_4 <- c(0.3, 0.5, 0.4)

# df_1 ratings df

df_1 <- data_frame(team = vec_1, rating = vec_2)

 team   rating
  <chr>   <dbl>
1 team_a    1.7
2 team_b    1.2
3 team_c    0.8

# df_2 schedule df

df_2 <- data_frame(home_tm = vec_1, away_tm = vec_3)

  home_tm away_tm
  <chr>   <chr>  
1 team_a  team_d 
2 team_b  team_e 
3 team_c  team_f 

Желаемый результат:

  home_tm away_tm home_tm_rat away_tm_rat
  <chr>   <chr>         <dbl>         <dbl>
1 team_a  team_d          1.7           0.3
2 team_b  team_e          1.2           0.5
3 team_c  team_f          0.8           0.4
......
......
......

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Как указано выше, можно проверить join из dplyr:

df_2 %>% 
  left_join(df_1, by= c('home_tm' = 'team')) %>% 
  rename(home_tm_rat = rating) %>% 
  left_join(df_1, by = c('away_tm' = 'team')) %>% 
  rename(away_tm_rat = rating) 

# A tibble: 3 x 4
  home_tm away_tm home_tm_rat away_tm_rat
  <chr>   <chr>         <dbl>       <dbl>
1 team_a  team_d          1.7         0.3
2 team_b  team_e          1.2         0.5
3 team_c  team_f          0.8         0.4
0 голосов
/ 07 мая 2019

Аналогично @liuminzhao, но я бы также посоветовал немного подумать о вашей структуре данных.Все будет проще, если у вас есть все команды в df_2 в одном столбце с отдельным столбцом, чтобы указать, кто находится дома / в гостях.Подробнее о аккуратных данных здесь

library(tidyverse)

df_2 %>% 
  #gather the two columns of teams into a single column, using another column to indicate home/away
  gather(key = HomeAway, value = team) %>% 
  #join the team ratings
  left_join(df_1, by = c("team" = "team"))


# A tibble: 6 x 3
HomeAway team   rating
<chr>    <chr>   <dbl>
1 home_tm  team_a    1.7
2 home_tm  team_b    1.2
3 home_tm  team_c    0.8
4 away_tm  team_d   NA  
5 away_tm  team_e   NA  
6 away_tm  team_f   NA 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...