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

R语言中如何保留重复列名的首个实例

保留数据集末尾带数字的重复列的首个实例

问题描述

数据集列名末尾带有数字且存在重复,需要保留每个列名系列的首个实例,由于数据规模大、重复列种类多,无法手动指定列名。

示例数据

ID...1<-c(1,2,3)
ID...2<-c(1,2,3)
Month...1<-c(1,2,3)
Month...2<-c(1,2,3)
Month...3<-c(1,2,3)
Month...4<-c(1,2,3)

have<-as.data.frame(cbind(ID...1,ID...2,Month...1,Month...2,Month...3,Month...4))

# 查看原数据
have

输出:

ID...1 ID...2 Month...1 Month...2 Month...3 Month...4
[1,]      1      1         1         1         1         1
[2,]      2      2         2         2         2         2
[3,]      3      3         3         3         3         3

期望结果

ID...1 Month...1
[1,]      1         1
[2,]      2         2
[3,]      3         3

解决方案

方法1:基础R实现(通用场景)

通过正则提取列名核心前缀,标记首个实例后筛选:

# 提取列名的核心部分(去除末尾的...+数字)
core_colnames <- sub("\\.\\.\\.\\d+$", "", colnames(have))
# 获取每个核心列名首次出现的索引
keep_cols <- !duplicated(core_colnames)
# 筛选得到目标数据集
want <- have[, keep_cols]

# 查看结果
want

方法2:dplyr实现(适用于首个实例后缀为...1的情况)

如果首个实例固定以...1结尾,可以直接匹配这类列:

library(dplyr)

want <- have %>%
  select(matches("^.+\\.\\.\\.1$"))

# 查看结果
want

两种方法都能得到期望结果:方法1更通用,即使首个实例的数字不是1也能处理;方法2更简洁,适合示例场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:50:59