r-一旦将循环放置在函数体-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),但没有帮助。有人知道为什么函数不能更改列名吗?

如果你只想删除"部门_;以及"_Converted_Sum";您可以通过使用stringr包中的str_remove_all()来避免循环。

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

最新更新