Как я могу заменить все вхождения определенной строки (например, "Å") соответствующим специальным символом? (К сожалению, кодировка символов неправильная).
Например, я хотел бы заменить «Â¼» на «ü», «ÃƒÂ¤» на «ä» и т. д. Я могу сделать это с помощью следующего кода, но как я могу применить это к каждому столбцу в data.frame? И как я могу сделать это наиболее эффективно?
df$colum<-gsub("ü", "ü", daf$column)
Спасибо!
см. также rvest::repair_encoding, он помогал мне несколько раз, но не работает на этих конкретных примерах (хотя это может быть связано с тем, что он был скопирован и вставлен сюда, так что все равно протестируйте его).





В зависимости от реальной проблемы может быть несколько способов решения этой проблемы:
А:
Если ваши исходные данные (например, csv-файл и т. д.) Выглядят нормально, и вы видите только плохую кодировку в R, вы должны попытаться прочитать файл с правильной кодировкой - большинство функций чтения и записи принимают параметр для этого, и UTF-8 должен работают в большинстве случаев. Вы можете, например, попробовать read.csv(your_file_path, fileEncoding='UTF-8') или аналогичный (в зависимости от того, как вы читаете свои данные).
B:
Данные фактически повреждены (то есть кто-то ранее испортил кодировку, и вы не виноваты в том, что неправильно их прочитали), и теперь вы хотите исправить это вручную (всего для пары символов, например ä, ö, ü, ß.)
Затем, используя пакет dplyr, вы можете:
сделать функцию, которая исправляет ошибки:
my_fun <- function(str){
str <- gsub("ü", "ü", str)
str <- gsub("ä", "ä", str)
< additional steps >
str
}
Примените его к каждому символьному столбцу вашего фрейма данных:
df %>% mutate_if (is.character, my_function)
Это правильно. Факторы хранят целое число для каждого значения и соответствующую строку в атрибуте levels. Для факторов вам нужно будет изменить только levels, а не применять функцию к каждому значению. Если вам быстро нужны факторы и факторы, и вы не заботитесь о скорости, вы можете сделать: mutate_if (is.factor, ~as.factor(my_function(as.character(.x)))
просто как комментарий, можно ли его прочитать в другом коде? это было бы проще