You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个DataFrame的匹配值创建第三个DataFrame?

解决方案

要生成符合预期的df3,核心逻辑是先筛选出df2中与df1满足「同一赛事(ID)、同一队伍(Team)、相同让分(Points)」条件的行,再将其与df1合并。以下是具体实现方式:

方法1:使用dplyr包(推荐)

library(dplyr)

# 筛选df2中符合匹配条件的行
df2_filtered <- df2 %>%
  semi_join(df1, by = c("ID", "Team", "Points"))

# 合并df1与筛选后的df2
df3 <- bind_rows(df1, df2_filtered)

方法2:基础R实现

# 提取df1中用于匹配的唯一键组合
match_keys <- unique(df1[c("ID", "Team", "Points")])

# 筛选df2中匹配的行
df2_filtered <- df2[
  with(df2, paste(ID, Team, Points) %in% with(match_keys, paste(ID, Team, Points))),
]

# 合并数据
df3 <- rbind(df1, df2_filtered)

结果说明

执行上述代码后,df3将包含df1的全部8行,加上df2中符合条件的4行(ID=1的前2行、ID=2的前2行),总计12行,与你预期的结构完全一致。

原方法失效原因

你之前使用的rows_upsert函数作用是更新匹配行并插入不匹配行,且指定的by参数包含了Home、Away、Price,这与实际需要的匹配条件(仅ID、Team、Points)不符,导致错误保留了df2中不满足条件的行,还覆盖了df1的部分数据。

内容的提问来源于stack exchange,提问作者Aaron Morris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:49:53