如何利用指定列名映射的第三份DataFrame行合并两份DataFrame?
按指定列映射合并两个DataFrame的最简方法
你的需求是纵向行合并(不是匹配关联的join操作),核心思路是先根据df3的映射规则重命名df2的列,再直接拼接两个结构一致的DataFrame即可,完全不用逐个指定列名。
实现代码
library(dplyr) # 原始数据 df1 <- data.frame(letter = c("A", "B", "C"), number = c(3, 2, 1), rating = c(32, 89, 23)) df2 <- data.frame(lttr = c("D", "E", "F"), mark = c(67, 32, 90), nmbr = c(4, 5, 6)) df3 <- data.frame(df1 = c("letter", "number", "rating"), df2 = c("lttr", "nmbr", "mark")) # 批量重命名df2的列,对齐df1的列名 colnames(df2) <- df3$df1[match(colnames(df2), df3$df2)] # 纵向合并两个结构一致的DataFrame df4 <- bind_rows(df1, df2) # 查看结果 df4
代码解释
match(colnames(df2), df3$df2)会自动匹配df2每一列在df3$df2中的位置,再通过该位置提取df3$df1的对应列名,实现批量重命名,哪怕有50列也能自动处理。bind_rows()会按列名自动匹配并拼接行,完全符合你预期的结果结构。
验证结果
运行后得到的df4与预期一致:
> df4 letter number rating 1 A 3 32 2 B 2 89 3 C 1 23 4 D 4 67 5 E 5 32 6 F 6 90
内容的提问来源于stack exchange,提问作者Lieke
相关产品推荐
相关产品推荐

