我有一个包含许多变量的数据帧,我想使用函数更改它们的名称。列名的形式如下
"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")