如何为含长列名的大数据集自动分配短列名并保留原列名作为标签?
自动生成短列名并保留原问卷问题标签的R方案
针对你有200列问卷数据、列名过长难以操作的问题,这里提供两种自动生成短列名的方法,同时完整保留原问题作为标签:
方法一:生成编号式短列名(简单直接)
这种方法生成var1、var2…varN格式的短列名,同时用对照表或列属性存储原问题:
library(readxl) # 读取原始数据 df <- read_excel("file.xlsx", sheet = 1) # 生成短列名 short_names <- paste0("var", seq_len(ncol(df))) # 方式1:创建短名-原问题对照数据框,方便后续查询 name_mapping <- data.frame( 短列名 = short_names, 原问卷问题 = colnames(df) ) # 方式2:将原问题作为列的属性,随时可调用查看 for(i in seq_len(ncol(df))){ attr(df[[i]], "原问题") <- colnames(df)[i] } # 替换数据框的列名为短名称 colnames(df) <- short_names
后续如果要查看某短列对应的原问题,要么查询name_mapping数据框,要么用attr(df$var1, "原问题")直接调取。
方法二:提取关键词生成有意义的短列名
如果想要短列名更贴合原问题含义,可以提取原问题的关键词生成短名(需用到stringr包):
library(readxl) library(stringr) df <- read_excel("file.xlsx", sheet = 1) # 提取原问题的前3个单词,转为小写并用下划线连接 short_names <- str_to_lower(str_replace_all(str_extract(colnames(df), "^\\w+\\s+\\w+\\s+\\w+"), "\\s+", "_")) # 自动处理重复的短列名(比如多个问题开头单词相同) short_names <- make.unique(short_names, sep = "_") # 同样保留原问题对照 name_mapping <- data.frame( 短列名 = short_names, 原问卷问题 = colnames(df) ) colnames(df) <- short_names
比如原问题是"What is your current weight?",生成的短列名是what_is_your;如果有重复,会自动加上序号如what_is_your_1。
内容的提问来源于stack exchange,提问作者Tina Heeley
相关产品推荐
相关产品推荐

