2017-11-25 242 views
0

我有2個數據框(工資和投球)。薪水(我們發現球員的薪水)有26'000個參賽項目,Pitching(我們發現球員的統計數據)有19'000項。顯然,賺取某些具體統計數據而不僅僅是薪水是相當複雜的,所以這是可理解的。合併2不等同數據框由多個條件

現在我想添加一個薪金列到Pitching數據框中,但只是匹配的(相同的球員,相同的日期)。我想代碼如

如果球員姓名(來自工資數據框)=球員姓名(來自投球數據框)和年份(來自薪水數據框)=年(從投球數據框),然後在投球數據框中插入薪水,否則寫N/A

然後以這種方式,我可以刪除與N/A的行,並與我想要的數據cleen工作表,可能少一點意見,但一個完整的。

我想是這樣的:

full_join(Salaries,Pitching, by="salary") %>% 
 
    mutate(condition = (Salaries$playerID == Pitching$playerID & Salaries$yearID = Pitching$yearID)) 
 
    
 

 
CombineDf <- merge(y=Salaries, y=Pitching, by=Pitching$playerID) 
 

 
joined = cbind(Salaries[match(names(Pitching), Salaries$playerID),], Pitching) 
 

 
Pitching$Salary <- ifelse(Salaries$playerID >= Pitching$playerID & Salaries$yearID >= Pitching$yearID, Salaries$salary, "N/A")

但遺憾的是沒有做正常工作。如果你能幫我解決這個問題,我會很高興。

非常感謝

+0

*但遺憾的是沒有任何工作正常* ...這是什麼意思?錯誤?不想要的結果? – Parfait

+0

嘿帕爾法斯感謝您的評論。是的,我成爲2 df的長度不一樣的錯誤。 –

回答

1

只需運行一個?merge保持所有x行(即左連接),其中無與倫比的Y列充滿NA:

combine_df <- merge(x=Pitching, y=Salaries, by=c("playerID", "yearID"), all.x=TRUE) 

而且因爲你會去除NA工資行之後,運行merge,兩個數據幀(即內連接)之間完全匹配,沒有明確的all.x可選參數。或者與


left_joindplyr

combine_df <- left_join(x=Pitching, y=Salaries, by = c("playerID", "yearID")) 

與上述相同的理由,通過ID字段兩組之間的完全匹配運行inner_join

+0

非常感謝您的幫助Parfait! C'est Parfait –