Здравствуйте, я пытаюсь написать функцию, которая будет принимать фрейм данных, и исправить его соответствующие заголовки столбцов, если в имени есть специальный символ или пробел. Функция, похоже, работает, поскольку результаты печатаются, но, похоже, не сохраняют соответствующие изменения в исходном фрейме. Мысли о том, как это исправить? Данные, которые я использовал для тестирования, были tbl_df, поэтому я не уверен, что это связано с тем, почему он не обновляется правильно. Благодарю.Функция не сохраняет изменения в DataFrame
nameChange <- function(df) {
for(i in 1:length(colnames(df)[i])) {
if(str_detect(colnames(df[i]),"[:punct:]|[:space:]") == TRUE) {
#Could use "\\s" to find space
names(df) <- str_replace_all(names(df)," *",'')
names(df) <- str_replace_all(names(df),"-",'')
#df <- df
assign('df',df, envir=.GlobalEnv)
#return(df)
print("Worked")
}
else{
print("Function did not replace anything")
}
}
}
Это данные, я использую для тестирования функции:
#data from: http://www.tableau.com/learn/tutorials/on-demand/getting-started-data
orders_path <- file.path("/Users/petergensler/Desktop/Global Superstore.xls")
order_table <- read_excel(orders_path, sheet = "Orders")
nameChange(order_table)
После того, как я называю COLNAMES на order_table вы должны быть в состоянии видеть, что дефис в продукте Подкатегорий удаляется, и все пробелы внутри каждого имени столбца больше не существуют.
Просто проверить ... 'str_replace_all (имена (df)," * ", '')' и 'str_replace_all (имена (df)," - ", '')' дают желаемый результат? –
Да, я знаю, что часть функции работает правильно. Я мог бы использовать \\ s для поиска пробелов в строках или [: space:] для их обнаружения. Моя реальная проблема заключается в том, что когда я передаю это tbl_df, он показывает внесенные изменения, но когда я вызываю colnames на tbl_df, это не похоже, что изменения были сохранены. – petergensler
Он говорит, что это сработало, но по-прежнему не похоже, что он сохраняет результаты. – petergensler