2017-11-25 10 views
0

私は2つのデータフレーム(給与とピッチ)を持っています。給与は(選手の給料がわかったところで)約26,000件、ピッチング(選手の統計は19,000件あります)があります。明らかに、給与だけでなく特定の統計のデータを得ることはかなり複雑です。したがって、これは分かりやすいものです。マージ2が等しくない複数の条件によるデータフレーム

ここでは、Pitchingデータフレームに給与カラムを追加したいが、一致するもの(同じプレーヤー、同じ日付)にのみ追加する。

プレイヤーの名前(給与データフレームから)=プレーヤー名(ピッチングデータフレームから)と年(給与データフレームから)=年(ピッチングデータフレームから)=ピッチングデータフレームに給与を挿入するそうでない場合はN/Aと書いてください

そして、このようにして、N/Aで行を削除して、私が望むデータできれいなシートを作ることができます。

私のような何か試してみました:

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

あなたのコメントをいただきありがとうParfais。うん、私は2 dfの長さが同じではないというエラーになります。 –

答えて

1

は単純に比類のy列がNAで満たされているすべてのx行(すなわち、加入左)維持?merge実行します。

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

をそして、あなたはNA給与行を削除しますので、その後、を両方のデータフレーム間で完全一致(つまり内部結合)し、明示的なall.xオプション引数なしで実行します。 IDフィールドによって両方の組との間の完全な一致をinner_joinを実行するために、上記

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

同じ理由:dplyrleft_join有するあるいは


+0

ご協力いただきありがとうございました! C'est Parfait –

関連する問題