一旦在函数体内放置 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")
我有一个包含许多变量的数据框,我想使用函数更改它们的名称。列名具有以下形式
"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")