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

如何为不等长的df1添加df2指定列?仅匹配col1添加col5

解决方案:仅匹配添加指定列到数据框

首先修正你提供的数据框构造代码中的语法错误:

df1 <- data.frame(
  c(1,1,1,2,2,2,3,3,3),
  c(9,9,9,8,8,8,7,7,7),
  c(6,6,6,5,5,5,4,4,4),
  c('A','A','A','B','B','B','C','C','C')
)
colnames(df1) <- c('col1','col2','col3', 'col4')

df2 <- data.frame(
  c(1,2,3),
  c(100,200,300),
  c('D','E','F')
)
colnames(df2) <- c('col1','col5', 'col6')

以下是几种满足需求的可行方案:

方法1:优化left_join避免多余列

既然你已经尝试过left_join,只需在合并时限定df2的列,就能避免引入不需要的col6:

library(dplyr)

# 仅选取df2中用于匹配和需要新增的列
df_result <- df1 %>%
  left_join(df2 %>% select(col1, col5), by = "col1")

方法2:用mutate+match直接赋值

无需合并整个数据框,通过匹配位置直接给df1新增列:

library(dplyr)

df_result <- df1 %>%
  mutate(col5 = df2$col5[match(col1, df2$col1)])

基础R版本写法:

df_result <- df1
df_result$col5 <- df2$col5[match(df_result$col1, df2$col1)]

方法3:基础R的merge函数指定列

利用merge的参数控制匹配逻辑和保留列:

# 只取df2的col1和col5进行匹配,all.x=TRUE保留df1所有行
df_result <- merge(df1, df2[, c("col1", "col5")], by = "col1", all.x = TRUE)

以上三种方法最终得到的df_result都会包含col1、col2、col3、col4、col5五列,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:54:24