R语言函数内如何为dataframe指定列重命名并添加“_cntr”后缀
问题原因
- 第一次代码的问题:
paste("cntr",sep = '_')仅生成1个长度的字符串,直接给所有列名赋值时,长度和总列数不匹配,因此只有第一列被赋值,剩余列名自动填充为NA。 - 第二次代码的问题:你拼接的是固定字符串
"cntr"和数字序列9:16,没有用到原始列名作为拼接素材,因此生成的列名不符合需求。
修复方案
你新增的8列对应的原始列名就是输入df的列名,直接提取原df列名拼接_cntr后缀,赋值给结果表的第9~16列即可,修改后的完整函数如下:
mi_funcion <- function(df) { row_medias <- tail(df, 1) row_resto <- head(df, -1) tmp <- rbind(row_resto - as.list(row_medias), row_medias) resultado = cbind(df, tmp) # 新增修改列名逻辑 colnames(resultado)[9:16] <- paste0(colnames(df), "_cntr") return(resultado) }
如果要适配任意列数的输入df,可以把硬编码的9:16替换为(ncol(df)+1):ncol(resultado),不用依赖固定的列序号。
测试验证
用你提供的测试数据执行:
state.df = as.data.frame(state.x77) res <- mi_funcion(state.df) # 查看修改后的列名 colnames(res)[9:16]
输出就会是你期望的Population_cntr、Income_cntr、Illiteracy_cntr等格式的列名。
内容的提问来源于stack exchange,提问作者Abel Pérez
相关产品推荐
相关产品推荐

