R语言基于公共列合并两个dataframe并实现列交替排列的方法
实现方案
核心逻辑很简单:先完成常规的按公共列合并,再对合并后的列按照df1非公共列、df2非公共列依次交替的规则重排即可。
基础R实现
# 1. 先按公共列name合并 merged_df <- merge(df1, df2, by = "name") # 2. 提取两个表除公共列外的列名 cols_df1 <- names(df1)[-1] cols_df2 <- names(df2)[-1] # 3. 生成交替排列的列顺序 new_col_order <- c("name", as.vector(rbind(cols_df1, cols_df2))) # 4. 重排列得到最终结果 final_df <- merged_df[, new_col_order] # 可选:如果需要把输入的字符型数值转为数值型,可加这一步 final_df <- data.frame(lapply(final_df, function(x) if(is.character(x)) as.numeric(x) else x))
tidyverse(dplyr)实现
library(dplyr) final_df <- inner_join(df1, df2, by = "name") %>% # 转数值为可选步骤,不需要可删除 mutate(across(-name, as.numeric)) %>% # 按交替规则选择列 select(name, unlist(purrr::map2(colnames(df1)[-1], colnames(df2)[-1], c)))
以上代码运行后得到的列顺序完全符合示例要求:name → HAN(df1)→ YHD(df2)→ ENA(df1)→ PUH(df2)依次排列。
内容的提问来源于stack exchange,提问作者SUMIT
相关产品推荐
相关产品推荐

