Столбец factor
, либо мы конвертируем в as.character
, либо используем stringsAsFactors = FALSE
df <- data.frame( city = c('São Paulo', 'Belo Horizonte', 'Natal',
'Goiânia', 'Manaus'), stringsAsFactors = FALSE)
Теперь код ОП будет работать
library(dplyr)
df %>%
mutate(city_correct = ifelse(city == 'São Paulo', 'Sao.Paulo',
ifelse(city == 'Belo Horizonte', 'Belo.Horizonte',
ifelse(city == 'Goiânia', 'Goiania', city ))))
# city city_correct
#1 São Paulo Sao.Paulo
#2 Belo Horizonte Belo.Horizonte
#3 Natal Natal
#4 Goiânia Goiania
#5 Manaus Manaus
Проблема заключается в том, что столбцы factor
принудительно приводятся к целочисленным значениям хранения в пределах ifelse
, и в результате в числовом столбце вывода 4
, 3
отображаются
In В дополнение к методу OP, это можно сделать более простым способом с chartr
и str_replace
library(stringr)
df %>%
mutate(city_correct = str_replace(chartr('ãâ', 'aa', city), ' ', '.'))
# city city_correct
#1 São Paulo Sao.Paulo
#2 Belo Horizonte Belo.Horizonte
#3 Natal Natal
#4 Goiânia Goiania
#5 Manaus Manaus