【问题标题】:Merge 2 not equally Data Frame by Multiple Condition按多个条件合并 2 个不相等的数据帧
【发布时间】:2018-05-09 09:22:32
【问题描述】:

我有 2 个数据框(薪水和推介)。 Salaries(我们在其中找到球员的薪水)有大约 26,000 个条目,而 Pitching(我们在其中找到球员的统计数据)有大约 19,000 个条目。显然,要获得一些具体的统计数据比仅仅获得工资要复杂得多,所以这是可以理解的。

现在我想在 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")

但遗憾的是,没有任何东西可以正常工作。如果你能帮我解决这个问题,我会很高兴。

非常感谢

【问题讨论】:

  • 但遗憾的是,没有任何工作正常 ...这是什么意思?错误?不想要的结果?
  • 嘿 Parfais 感谢您的评论。是的,我变成了 2 df 的长度不一样的错误。

标签: r join inner-join dplyr


【解决方案1】:

只需运行 ?merge 保持所有 x 行(即左连接),其中不匹配的 y 列填充有 NA:

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

并且由于之后您将删除 NA Salary 行,因此运行 merge 在两个数据帧之间完全匹配(即内部连接),没有显式的 all.x 可选参数。


或者在dplyr 中使用left_join:

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

运行inner_join 以通过 id 字段在两个集合之间完全匹配的原因相同。

【讨论】:

  • 非常感谢您对 Parfait 的帮助! C'est Parfait
猜你喜欢
  • 2019-08-10
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2021-09-29
  • 2020-08-26
  • 1970-01-01
相关资源
最近更新 更多