0

I have two dataframes

First one:

df <- structure(list(Tm = c("ARI", "ARI", "ARI", "ARI", "ARI", "ARI", 
"ARI", "ARI", "ARI", "ARI"), Opp = c("COL", "COL", "COL", "LAD", 
"LAD", "STL", "STL", "STL", "SFG", "SFG"), Result = c("W", "W", 
"L", "W", "W", "W", "L", "W", "W", "W"), Win = c("Corbin", "Ray", 
"Shaw", "Godley", "Corbin", "Ray", "Wacha", "Hirano", "Godley", 
"Salas"), Loss = c("Gray", "Senzatela", "Salas", "Kershaw", "Wood", 
"Wainwright", "Greinke", "Leone", "Holland", "Suarez")), row.names = 2:11, class = "data.frame")



> df
    Tm Opp Result    Win       Loss
2  ARI COL      W Corbin       Gray
3  ARI COL      W    Ray  Senzatela
4  ARI COL      L   Shaw      Salas
5  ARI LAD      W Godley    Kershaw
6  ARI LAD      W Corbin       Wood
7  ARI STL      W    Ray Wainwright
8  ARI STL      L  Wacha    Greinke
9  ARI STL      W Hirano      Leone
10 ARI SFG      W Godley    Holland
11 ARI SFG      W  Salas     Suarez

Second one:

war_df <- structure(list(Team = c("ARI", "ATL", "BAL", "BOS", "CHC", "CHW", 
"CIN", "CLE", "COL", "DET"), WAR = c(2.4, 9.1, -23.5, 20.9, 12.6, 
-17.3, -9.5, 15.3, 5.4, -17.3)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -10L))



> war_df
   Team    WAR
 1 ARI     2.4
 2 ATL     9.1
 3 BAL   -23.5
 4 BOS    20.9
 5 CHC    12.6
 6 CHW   -17.3
 7 CIN    -9.5
 8 CLE    15.3
 9 COL     5.4
10 DET   -17.3

I want the following result (only showing part of the final dataframe):

    Tm Opp Result    Win       Loss    Tm_WAR    Opp_WAR
2  ARI COL      W Corbin       Gray       2.4        5.4
3  ARI COL      W    Ray  Senzatela       2.4        5.4
4  ARI COL      L   Shaw      Salas       2.4        5.4

Rules for the join:

  • The value of Tm_WAR is taken from df_WAR and is the WAR of the Tm in df.
  • The value of Opp_WAR is taken from df_WAR and is the WAR of the Opp in df.
jfeuerman
  • 177
  • 9
  • Maybe `rename` your columns and use one of `inner_` or `left_join`? – NelsonGon May 01 '19 at 19:54
  • how about rename after using `merge()`. I would write codes like this `df_merged = merge(df, war_df, by.x = "Tm", by.y = "Team") %>% merge(war_df, by.x = "Opp", by.y = "Team") names(df_merged)[c(6,7)] = c("Tm_WAR", "Opp_WAR")` – koki25ando May 02 '19 at 04:03

0 Answers0