You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何筛选列名唯一的列,排除重复列名的冗余列?

基础R实现(无需依赖第三方包)

核心逻辑是通过duplicated()判断列名的重复状态,仅保留首次出现的列:

# 假设你的数据集存储为数据框df
df_filtered <- df[, !duplicated(colnames(df))]

duplicated(colnames(df))会返回与列数等长的逻辑向量,首次出现的列名对应值为FALSE,后续重复出现的对应值为TRUE,取反后索引即可筛选出所有列名第一次出现的列。

可以用以下测试代码验证效果,和你给出的数据集结构完全一致:

# 构造模拟数据集,保留原生重复列名
df_test <- data.frame(
  Samples = c("S1", "S2", "S3"),
  col1 = c(12, 25, 18),
  col2 = c(32, 17, 9),
  col3 = c(4, 6, 2),
  col4 = c(7, 3, 5),
  col2 = c(0.001, 0.003, 0.002),
  col1 = c(0.0005, 0.0002, 0.0004),
  check.names = FALSE # 关闭R默认自动重命名重复列的机制
)

# 执行列去重
df_filtered <- df_test[, !duplicated(colnames(df_test))]
# 查看输出列名,符合仅保留首次出现列的要求
colnames(df_filtered)
# 输出结果:[1] "Samples" "col1"    "col2"    "col3"    "col4"

注意事项

如果是从本地csv/tsv文件读入数据集,需要在读入时添加check.names = FALSE参数,避免R自动给重复列名加.1/.2后缀导致去重逻辑失效:

# 读入数据示例
df <- read.csv("你的数据集文件路径.csv", check.names = FALSE, row.names = 1)

dplyr 实现(适配tidyverse工作流)

如果你习惯用tidyverse套件处理数据,可以用如下写法:

library(dplyr)
df_filtered <- df %>%
  select(which(!duplicated(colnames(.))))

内容的提问来源于stack exchange,提问作者camcecc10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:45:04