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

如何创建按字母与序号递增规则命名的列名

列名批量重命名解决方案

需求背景

我有一组命名复杂的波兰语列头,结构呈现规律:以Proszę(含拼写变体Prosze)开头的主列后,会跟随一组对应的子列。需要实现以下重命名规则:

  • 所有主列依次命名为「Primary A」「Primary B」「Primary C」…
  • 对应主列的子列依次命名为「Second A1」「Second A2」…「Second B1」「Second B2」…

列头示例

[1] "Proszę podać, ile godzin dziennie oglądasz zazwyczaj treści VIDEO wymienione wyżej, BEZ PRZERYWANIA INNĄ AKTYWNOSCIĄ.\n"
[2] "oglądanie treści video, w tym granie w gry video, itp....12"
[3] "słuchanie muzyki, audycji radiowych, podcastów, audiobooków, itp....13"
[4] "edukacja - czytanie lub wykonywanie zadań związanych ze szkołą/studiami, itp. "
[5] "pisanie e-maili lub wysyłanie postów w social mediach, itp. "
[6] "wysyłanie SMS lub korzystanie z komunikatorów internetowych i czatów, itp. "
[7] "rozmowa przez telefon lub komunikator video, itp. "
[8] "Proszę podać, ile godzin dziennie słuchasz zazwyczaj treści AUDIO wymienione wyżej, BEZ PRZERYWANIA INNĄ AKTYWNOSCIĄ. \n"
[9] "oglądanie treści video, w tym granie w gry video, itp....19"
[10] "słuchanie muzyki, audycji radiowych, podcastów, audiobooków, itp.2"

数据集示例(R结构)

structure(list(`Prosze podac, ile godzin dziennie korzystasz zazwyczaj z materialów do CZYTANIA wymienionych wyzej, BEZ PRZERYWANIA INNA AKTYWNOSCIA.
` = "mniej niz 1 godzine", 
    `ogladanie tresci video, w tym granie w gry video, itp.2` = "nigdy", 
    `sluchanie muzyki, audycji radiowych, podcastów, audiobooków, itp.3` = "okolo 3- 4 godzin", 
    `czytanie lub wykonywanie zadan zwiazanych ze szkola/studiami, itp.2` = "okolo 1-2 godzin", 
    `pisanie e-maili lub wysylanie postów w social mediach, itp.2` = "mniej niz 1 godzine", 
    `wysylanie SMS lub korzystanie z komunikatorów internetowych i czatów, itp.2` = "okolo 1-2 godzin", 
    `rozmowa przez telefon lub komunikator video, itp.2` = "nigdy", 
    `Prosze podac, ile godzin dziennie  spedzasz zazwyczaj na czytaniu i pisaniu MAILE I POSTY na social mediach wymienionych wyzej, BEZ PRZERYWANIA INNA AKTYWNOSCIA. 
` = "mniej niz 1 godzine", 
    `ogladanie tresci video, w tym granie w gry video, itp.3` = "nigdy", 
    `sluchanie muzyki, audycji radiowych, podcastów, audiobooków, itp....34` = "okolo 2-3 godzin"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

R代码实现

# 加载dplyr(可选,仅用于数据查看)
library(dplyr)

# 加载示例数据集(如果已有数据集可跳过此步)
MMT_sample <- structure(list(`Prosze podac, ile godzin dziennie korzystasz zazwyczaj z materialów do CZYTANIA wymienionych wyzej, BEZ PRZERYWANIA INNA AKTYWNOSCIA.
` = "mniej niz 1 godzine", 
    `ogladanie tresci video, w tym granie w gry video, itp.2` = "nigdy", 
    `sluchanie muzyki, audycji radiowych, podcastów, audiobooków, itp.3` = "okolo 3- 4 godzin", 
    `czytanie lub wykonywanie zadan zwiazanych ze szkola/studiami, itp.2` = "okolo 1-2 godzin", 
    `pisanie e-maili lub wysylanie postów w social mediach, itp.2` = "mniej niz 1 godzine", 
    `wysylanie SMS lub korzystanie z komunikatorów internetowych i czatów, itp.2` = "okolo 1-2 godzin", 
    `rozmowa przez telefon lub komunikator video, itp.2` = "nigdy", 
    `Prosze podac, ile godzin dziennie  spedzasz zazwyczaj na czytaniu i pisaniu MAILE I POSTY na social mediach wymienionych wyzej, BEZ PRZERYWANIA INNA AKTYWNOSCIA. 
` = "mniej niz 1 godzine", 
    `ogladanie tresci video, w tym granie w gry video, itp.3` = "nigdy", 
    `sluchanie muzyki, audycji radiowych, podcastów, audiobooków, itp....34` = "okolo 2-3 godzin"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

# 获取所有列名
col_names <- colnames(MMT_sample)

# 定位所有主列(匹配开头的Proszę/Prosze,保留大小写以确保准确)
primary_positions <- grep("^Prosz(e|ę)", col_names)

# 生成主列的分组标识(A、B、C...)
group_tags <- LETTERS[seq_along(primary_positions)]

# 初始化新列名向量
new_col_names <- character(length(col_names))

# 遍历每个主列,为其及对应子列命名
for (idx in seq_along(primary_positions)) {
  # 命名当前主列
  new_col_names[primary_positions[idx]] <- paste0("Primary ", group_tags[idx])
  
  # 确定当前主列对应的子列范围
  if (idx < length(primary_positions)) {
    sub_start <- primary_positions[idx] + 1
    sub_end <- primary_positions[idx + 1] - 1
  } else {
    sub_start <- primary_positions[idx] + 1
    sub_end <- length(col_names)
  }
  
  # 为子列命名
  if (sub_start <= sub_end) {
    sub_numbers <- seq_len(sub_end - sub_start + 1)
    new_col_names[sub_start:sub_end] <- paste0("Second ", group_tags[idx], sub_numbers)
  }
}

# 应用新列名
colnames(MMT_sample) <- new_col_names

# 查看重命名后的结果
MMT_sample

代码说明

  1. 主列定位:通过grep精准匹配以Proszę或Prosze开头的列,兼容拼写变体;
  2. 分组标识:使用大写字母序列为每个主列分配唯一分组标签;
  3. 子列范围划分:自动识别每个主列对应的子列区间(当前主列下一个位置到下一个主列前一个位置,最后一组子列到数据集末尾);
  4. 批量命名:主列统一命名为「Primary X」,子列命名为「Second Xn」(X为分组字母,n为子列序号)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:45:43