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

如何将两个R语言DataFrame的列合并,不匹配值填充NA?

实现两个DataFrame的指定合并方式

你需要的是将两个DataFrame按值匹配对齐,保留所有元素,独有的元素对应另一列补NA,以下是几种可行的实现方法:

方法一:使用dplyr包(推荐,代码简洁)

先给每个DataFrame添加以自身列值为键的临时列,再通过全连接合并,最后保留目标列:

library(dplyr)

# 构造带键的临时数据框
df1_with_key <- df1 %>% mutate(key = column_df1)
df2_with_key <- df2 %>% mutate(key = column_df2)

# 全连接并整理列
df3 <- full_join(df1_with_key, df2_with_key, by = "key") %>%
  select(column_df1, column_df2)

运行后得到的df3结构完全符合你的需求:

column_df1 column_df2
1          A          A
2          B          B
3          C          C
4          D       <NA>
5       <NA>          E

方法二:使用base R原生merge函数

无需额外安装包,用base R的merge函数实现全连接:

# 给数据框添加键列
df1_with_key <- transform(df1, key = column_df1)
df2_with_key <- transform(df2, key = column_df2)

# 全合并并筛选目标列
df3 <- merge(df1_with_key, df2_with_key, by = "key", all = TRUE)[, c("column_df1", "column_df2")]

方法三:手动构造(不依赖任何第三方包)

先获取所有值的并集,再分别匹配填充:

# 获取两个列的所有唯一值并集
all_values <- union(df1$column_df1, df2$column_df2)

# 分别生成两个目标列,匹配到的保留值,否则填NA
column_df1 <- ifelse(all_values %in% df1$column_df1, all_values, NA)
column_df2 <- ifelse(all_values %in% df2$column_df2, all_values, NA)

# 组合成最终数据框
df3 <- data.frame(column_df1, column_df2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:45