【问题标题】:How to merge two dataframes with different length and one is a subset of the other [duplicate]如何合并两个不同长度的数据帧,一个是另一个的子集[重复]
【发布时间】:2017-11-23 09:25:43
【问题描述】:

我有两个数据框,df1df2df1 包含一个 member_ID 和一个 result_id df2 包含一个 member_ID 和一个 result_id

但是,在df1 我有 1000 行,在df2 我有 1200 行。 df1 包含 df2 中的每一行以及其他 200 行。

我需要df3,包含member_IDresult_ID, 其中包含所有1200行,如果df1中有result_id,则应使用df1的值,而如果df1中没有result_id(其余200行),则使用@中的result_ID应该使用 987654341@。

合并后,df 将仅包含 1000 个匹配的行。

【问题讨论】:

标签: r merge


【解决方案1】:

您可以使用dplyr 包并执行anti_join 以获取包含在df2 中的其他结果,然后执行rbind 以将所有结果绑定到一个数据框中:

library(dplyr)
df_tmp <- anti_join(df1 ,df2, by=member_ID)
df3 <-rbind(df_tmp, df1)

【讨论】:

  • 谢谢,它成功了。我还有一个问题,相同的数据框,df1 包含 1000 行,df2 包含 1200 行。让我们说 df1 不完全是 df2 的子集(事实证明是这样,所以我现在有超过 1200 行。我需要创建 df3 有 1200 行,如果 df2 的 member_ID = df1 的 member_ID,则使用df1的result_ID,如果没有匹配,则使用df2的result_ID,但我只需要df2的成员。
  • @Tilsight 我认为它应该可以正常工作,因为您正在接受所有df1 以及df1df2 之间的差异。为确保没有重复,您可以在最后添加一个额外的步骤并执行以下操作:df3 &lt;- unique(df3)
  • 谢谢,芭芭拉,但不幸的是没有重复。我现在正在检查反连接。
  • @Tilsight 我现在已经编辑了答案,试试df_tmp &lt;- anti_join(df1 ,df2, by=member_ID)
  • 我现在明白其中的逻辑了。我们通过成员 ID 获取“差异”来获取那些没有出现在 df1 中的人,然后将其添加到 df1 中。它正在变得更好,但仍然不完美。我会回复你出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 2014-08-13
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多