R语言合并具有相同列名的两个dataframe的实现方法
R语言纵向合并两个列不完全一致的数据框
你需要实现的是按行拼接两个数据框,保持df_1在前、df_2在后的顺序,df_2缺失的Age列自动填充NA,以下是两种可直接运行的实现方案:
构造测试样例数据
先运行以下代码复现你提到的两个测试数据框,方便后续验证结果:
# 构造df_1 df_1 <- data.frame( ID = c(1, 2), Name = c("Jaz", "Sam"), Age = c(25, 28), City = c("D", "E") ) # 构造df_2 df_2 <- data.frame( ID = c(4, 5), Name = c("Alex", "Abi"), City = c("F", "E") )
方案1:基础R实现(无第三方包依赖)
基础R自带的rbind()要求两个拼接对象列名、列数完全一致,只需要先给df_2补上缺失的Age列、赋值为NA,调整列顺序和df_1一致后直接拼接即可:
# 给df_2补充缺失列 df_2$Age <- NA # 按指定列顺序拼接,保证df_1在前 merged_df <- rbind(df_1, df_2[, c("ID", "Name", "Age", "City")])
方案2:dplyr实现(代码更简洁,自动对齐列)
如果日常使用tidyverse生态的工具,直接调用dplyr::bind_rows()即可,函数会自动匹配两个数据框的同名列,缺失列自动填充NA,不需要手动补列:
# 未安装dplyr先运行下一行:install.packages("dplyr") library(dplyr) merged_df <- bind_rows(df_1, df_2)
结果验证
运行print(merged_df)即可得到符合要求的4行结果:
ID Name Age City 1 1 Jaz 25 D 2 2 Sam 28 E 3 4 Alex NA F 4 5 Abi NA E
说明:
bind_rows()默认按照传入数据框的顺序保留行顺序,列顺序优先取第一个传入数据框的列顺序,和要求的输出规则完全匹配。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

