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

在R中如何为数据框添加不同长度列?解决left_join重复问题

解决df1与df2连接后重复行的问题

嘿,这个场景我太熟悉了!你用left_join后出现重复行,是因为df2里每个ID对应了多条记录,left_join会把所有匹配的行都和df1对应行做连接,自然就把df1的每一行都复制了多次。

要得到你想要的结果,核心是先拿到df2里每个ID对应的唯一Category值,再和df1做关联,这里给你两种简单的解决方案:

方法1:先对df2去重再连接(推荐,逻辑清晰)

用dplyr的distinct()函数提取df2中不重复的ID-Borrower-Category组合,再和df1做左连接:

library(dplyr)

# 提取df2中唯一的ID-借款人-分类对应关系
df2_unique <- df2 %>% distinct(ID, Borrower, Category)
# 执行左连接
df3 <- left_join(df1, df2_unique, by = c("ID", "Borrower"))

因为你的df2里同一个ID和借款人对应的分类都是相同的,distinct()会自动保留每个组合的唯一行,这样连接后就不会产生重复了。

方法2:直接匹配赋值(更简洁)

如果能确保df2中每个ID对应的Category值完全一致,也可以直接给df1新增列,用match()匹配每个ID在df2中第一次出现的位置,提取对应的Category:

df1$Category <- df2$Category[match(df1$ID, df2$ID)]

这个方法不需要额外的连接操作,一步就能完成赋值,效率也更高。

两种方法最终得到的df3都会是你期望的结果:

ID Borrower Category
1 A X
2 A X
3 A X

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:57:45