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

R语言合并不同长度数据框:匹配指定列并保留首个URL

嘿,刚学R就碰到这种数据合并的需求很正常,我给你整理了两种实用的实现方案,分别用base R和dplyr来搞定,刚好符合你的要求👇

先确认下你的数据集(方便复现操作):

page <- c("ABC", "DDD", "DSD")
freq <- c(1,33,555)
df <- data.frame(page, freq)
df1 <- data.frame(page = c("ABC", "DDD", "DSD", "SDSD", "vEf", "DDD"), URL = c("fakeurl1", "fakeurl2", "fakeurl3", "fakeurl4", "fakeurl5", "fakeurl6"))

方法一:Base R 实现

思路1:用match()直接匹配首次出现的URL

match()函数会返回df$page在df1$page中首次出现的位置,我们可以用这个位置从df1$URL中提取对应的链接,直接添加到df里:

# 提取每个page首次出现的URL并添加到df
df$URL <- df1$URL[match(df$page, df1$page)]

# 查看最终结果
df

输出结果:

page freq      URL
1  ABC    1 fakeurl1
2  DDD   33 fakeurl2
3  DSD  555 fakeurl3

思路2:先去重df1再合并

如果你更习惯用merge()函数的逻辑,可以先对df1做去重处理,只保留每个page的第一条记录,再和df合并:

# 对df1去重,保留每个page的首次出现条目
df1_unique <- df1[!duplicated(df1$page), ]

# 合并两个数据框,只保留df中的所有行
result <- merge(df, df1_unique, by = "page", all.x = TRUE)

# 查看结果
result

这个方法的输出和思路1完全一致,适合偏好merge操作逻辑的朋友。

方法二:dplyr 实现

dplyr的语法更直观易懂,核心步骤是:先对df1去重(保留每个page的第一条记录),再用left_join()和df合并,确保df里的所有行都被保留:

library(dplyr)

# 去重df1 + 合并数据框
result_dplyr <- df %>%
  left_join(df1 %>% distinct(page, .keep_all = TRUE), by = "page")

# 查看最终结果
result_dplyr

这里distinct(page, .keep_all = TRUE)的作用是:按照page字段去重,同时保留该行的其他列(也就是对应的URL);left_join则保证df中的所有page都能匹配到对应的首次出现URL,不会丢失数据。

不管哪种方法,都能精准实现你要的“将df1中每个page首次出现的URL合并到df中”的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:00