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

如何在R中合并多个DataFrame,保留共享列并新增非共享列?

在R中合并列不完全一致的多个DataFrame

你可以用以下两种常用方法实现需求,它们会自动识别所有列、填充缺失值,无需手动处理共享/非共享列:

方法1:使用dplyr的bind_rows()

dplyr包的bind_rows()函数原生支持合并列名不完全匹配的DataFrame,自动将所有出现过的列纳入结果,缺失值用NA填充。

示例代码:

# 加载dplyr包
library(dplyr)

# 构造你的示例数据
df_2016 <- data.frame(year = 2016, id = 1:3, fav_food = c("pizza", "sushi", "burger"))
df_2017 <- data.frame(year = 2017, id = 1:3, fav_movie = c("Inception", "Matrix", "Interstellar"))
df_2018 <- data.frame(year = 2018, id = 1:3, degree = c("Bachelor", "Master", "PhD"))

# 合并DataFrame
df_2016_2018 <- bind_rows(df_2016, df_2017, df_2018)

合并后的结果会包含year、id、fav_food、fav_movie、degree所有列,对应年份没有的列会自动填充NA。

方法2:使用data.table的rbindlist()

如果处理的是大数据量,data.table包的rbindlist()效率更高,设置fill=TRUE参数即可实现缺失列的NA填充。

示例代码:

# 加载data.table包
library(data.table)

# 构造示例数据(同上)
df_2016 <- data.frame(year = 2016, id = 1:3, fav_food = c("pizza", "sushi", "burger"))
df_2017 <- data.frame(year = 2017, id = 1:3, fav_movie = c("Inception", "Matrix", "Interstellar"))
df_2018 <- data.frame(year = 2018, id = 1:3, degree = c("Bachelor", "Master", "PhD"))

# 合并DataFrame,fill=TRUE填充缺失值
df_2016_2018 <- rbindlist(list(df_2016, df_2017, df_2018), fill = TRUE)

# 若需要转回data.frame格式
df_2016_2018 <- as.data.frame(df_2016_2018)

这两种方法都完全满足你的需求:自动识别共享列、创建非共享列、按行绑定并填充缺失值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30