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

在R语言中实现两表合并:用更新排名覆盖旧产品排名

嗨,这个需求在数据处理里挺常见的,我给你分享两个实用的R解决方案,分别用dplyr(tidyverse生态)和基础R实现,你可以根据自己的习惯选:

方法1:用dplyr(推荐,代码更直观易读)

首先我们先构造你给出的示例数据,然后通过左连接+值替换来完成更新:

# 构造示例数据
table1 <- data.frame(
  Product = c("a", "b", "c", "d", "e"),
  Rank = c(32, 21, 14, 36, 1)
)

table2 <- data.frame(
  Product = c("b", "d"),
  Rank = c(7, 8)
)

# 加载dplyr包(如果没装先运行install.packages("dplyr"))
library(dplyr)

# 核心操作:左连接后合并Rank值
result <- table1 %>%
  # 按Product左连接两张表,用后缀区分新旧Rank
  left_join(table2, by = "Product", suffix = c("_old", "_new")) %>%
  # 优先用新Rank,没有新数据就保留旧Rank
  mutate(Rank = coalesce(Rank_new, Rank_old)) %>%
  # 只保留需要的两列
  select(Product, Rank)

# 查看结果
print(result)

运行后就能得到你想要的输出:

Product Rank
1       a   32
2       b    7
3       c   14
4       d    8
5       e    1

方法2:基础R实现(无需额外安装包)

如果你不想加载第三方包,用基础R的match函数也能搞定:

# 构造示例数据(和上面一致)
table1 <- data.frame(
  Product = c("a", "b", "c", "d", "e"),
  Rank = c(32, 21, 14, 36, 1)
)

table2 <- data.frame(
  Product = c("b", "d"),
  Rank = c(7, 8)
)

# 找到table1中Product在table2里的匹配位置
match_indices <- match(table1$Product, table2$Product)

# 替换匹配到的Rank值,未匹配的保留原值
table1$Rank[!is.na(match_indices)] <- table2$Rank[na.omit(match_indices)]

# 查看结果
print(table1)

这个方法的逻辑是通过match定位需要更新的行,然后直接替换对应位置的Rank值,结果和上面完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:32:31