R Studio合并DataFrame时避免公共列出现.x/.y后缀的问题
你当前用full_join是横向匹配合并,会将非关联键的同名列加.x/.y后缀区分,不符合垂直堆叠行的需求,可根据场景选择以下解决方案:
方案1:结构完全一致时直接行绑定(最适合大规模批量场景)
如果所有待合并的DataFrame列名、列顺序完全一致,直接使用dplyr::bind_rows做行堆叠即可,自动合并同名列,不会产生拆分后缀:
library(dplyr) # 两个表合并 test3 <- bind_rows(test1, test2) # 多循环批量场景:把所有待合并的DataFrame存入列表后一次性合并,性能远高于循环逐次rbind df_list <- list(test1, test2, test3, ..., testn) final_df <- bind_rows(df_list)
运行后直接得到你期望的输出:
MCN_ID UNS 1930 1 AABB 1 2 BBAA 23
方案2:需筛选指定列合并的场景
如果待合并表存在多余列,仅需要保留核心列(比如MCN_ID、UNS 1930),可以结合purrr::map_dfr批量提取后合并:
library(dplyr) library(purrr) # 定义要保留的核心列 core_cols <- c("MCN_ID", "UNS 1930") # 批量处理列表中所有表,提取核心列后合并 final_df <- map_dfr(df_list, ~ .x %>% select(all_of(core_cols)))
方案3:存在重复MCN_ID需去重的场景
如果多个表中存在相同MCN_ID的记录,需要去重可追加对应处理逻辑:
# 按MCN_ID去重,保留第一条出现的记录 final_df <- final_df %>% distinct(MCN_ID, .keep_all = TRUE) # 按MCN_ID去重,保留UNS 1930数值最大的记录 final_df <- final_df %>% group_by(MCN_ID) %>% slice_max(`UNS 1930`, n = 1, with_ties = FALSE) %>% ungroup()
内容的提问来源于stack exchange,提问作者katiebrown
相关产品推荐
相关产品推荐

