如何使用bind_cols()仅保留首个同名列并丢弃后续重复列?
解决bind_cols合并tibble时保留首次同名列的问题
当你用bind_cols()合并多个tibble时,如果存在同名列,默认会给重复列加后缀(比如Sepal.Length...1)。要只保留首次出现的列、丢弃后续重复列,可以用以下几种方法:
方法1:针对两个数据集的快速处理
如果只是合并两个数据集,直接筛选第二个数据集中不重复的列即可:
library(tidyverse) # 合并iris和iris,只保留第一个iris的所有列 result <- bind_cols(iris, iris %>% select(-all_of(colnames(iris))))
方法2:支持多个数据集的通用处理
如果要合并多个数据集,用reduce()函数逐步合并,每次只保留新数据集中未出现过的列:
library(tidyverse) # 定义要合并的数据集列表(这里用两个iris做示例) dfs <- list(iris, iris, iris) # 逐步合并,自动丢弃后续重复列 result <- reduce(dfs, function(prev_df, curr_df) { # 筛选当前数据集中不在之前结果里的列 new_cols <- setdiff(colnames(curr_df), colnames(prev_df)) bind_cols(prev_df, curr_df %>% select(all_of(new_cols))) })
运行后result的列名和第一个iris完全一致,没有任何重复列或自动添加的后缀。
内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki
相关产品推荐
相关产品推荐

