一旦在函数体内放置 for 循环,数据框列就不会改变 - Rstudio

Data frame columns do not change once placing for-loop inside of function body - Rstudio

我有一个包含许多变量的数据框,我想使用函数更改它们的名称。列名具有以下形式

"Department_Home_Converted_Sum"                  
"Department_Womenswear_Converted_Sum"               
"Department_Menswear_Converted_Sum"               
"Department_Shoes_Converted_Sum"               
"Department_Kidswear_Converted_Sum" 

所以我想删除 "Department_""_Converted_Sum"。我设法通过像这样循环遍历列名来做到这一点,效果很好。

for (i in seq(1,length(colnames(mydf)))){
    colnames(mydf)[i] = str_sub(colnames(mydf)[i], 11, str_length(colnames(mydf)[i])-14)
}

但令我困扰的是,一旦我将其放入一个函数中,然后在 mydf 上使用该函数,数据框就没有更改列名。

rename_columns <- function(df){
   for (i in seq(1,length(colnames(df)))){
      colnames(df)[i] = str_sub(colnames(df)[i], 11, str_length(colnames(df)[i])-14)
   }
}

rename_columns(mydf)

我也尝试添加一个 return(df) 但它没有帮助。有谁知道为什么函数不能改变列名?

如果您只想删除“Department_”和“_Converted_Sum”,您可以使用 stringr 包中的 str_remove_all() 来避免循环。

names(df) <- stringr::str_remove_all(names(df), "Department_|_Converted_Sum")