Как изменить указанные c переменные с помощью функции mutate - PullRequest
1 голос
/ 27 января 2020

У меня есть фрейм данных, как в приведенном ниже примере, который содержит названия городов, и мне нужно заменить некоторые имена, чтобы удалить пробелы и специальные символы, такие как ~ и ´.

df = data.frame (city = c («Сан-Паулу», «Белу-Оризонти», «Натал», «Гояния», «Манаус»))

Проблема в том, что мне нужно сохранить имена, которые не нужны быть измененным. Я использую функцию mutate ниже, но она заменяет имена без пробелов или специальных символов числами.

df = df%>% mutate (city_correct = ifelse (city == 'São Paulo', 'Sao .Paulo ', ifelse (city ==' Belo Horizonte ',' Belo.Horizonte ', ifelse (city ==' Goiânia ',' Goiania ', city))))

Кто-нибудь знает, как я могу заставить работать вышеприведенную функцию?

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я не знаю, будет ли это только для этого конкретного случая c. Но если вы заполните всю информацию из столбца 'city', он сработает.

df = data.frame( city = c('São Paulo', 'Belo Horizonte', 'Natal', 'Goiânia', 'Manaus'))

df = df %>% mutate(city_correct = ifelse(city == 'São Paulo', 'Sao.Paulo', ifelse(city == 'Belo Horizonte', 'Belo.Horizonte', ifelse(city == 'Natal', 'Natal', ifelse(city == 'Goiânia', 'Goiania', ifelse(city == 'Manaus', 'Manaus', city ))))))

df
0 голосов
/ 27 января 2020

Столбец 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...