R语言导入Excel后如何保留重名数据列的最后一列
问题原因
read_excel()默认会对重复列名做自动重命名修复,会给重复的列名追加...数字格式的后缀,你原始表的两列Patient读入后会变成Patient、Patient...2,列名已经不再完全重复,所以你写的duplicated()筛选逻辑无法匹配到重复列,自然得不到预期结果。
解决方案
方案1:读入阶段保留原始重复列名
读入时指定.name_repair = "minimal",禁止readxl自动修改重复列名,再执行你原来的筛选逻辑即可:
library(readxl) x <- read_excel(path, sheet = 1, .name_repair = "minimal") df <- data.frame(x) df <- df[, !duplicated(colnames(df), fromLast = TRUE)]
方案2:已读入数据的修复方案
如果数据已经读入到环境中,可以先把readxl自动追加的后缀删掉,还原原始列名后再筛选:
# 清除列名末尾自动追加的...+数字后缀 colnames(df) <- sub("\\.\\.\\.\\d+$", "", colnames(df)) # 保留每一组重名列的最右侧列 df <- df[, !duplicated(colnames(df), fromLast = TRUE)]
内容的提问来源于stack exchange,提问作者Jane Doe
相关产品推荐
相关产品推荐

