У меня есть набор точек данных, относящихся к различным исследованиям (представленных в строках), со столбцами, содержащими информацию о стране, количестве участников и т. д.
Я хочу очистить данные о стране, так как есть небольшие ошибки, например. лишние пробелы, разные варианты написания/аббревиатуры и т.д.
Для этого я создал новую переменную country_mod
, чтобы сохранить исходные данные, используя существующую переменную страны. Я проверил уровни в этой новой переменной и использовал ее для написания некоторых функций замены (согласно приведенному ниже коду). Когда я запускаю их, сообщения об ошибке нет, но повторная проверка уровней показывает, что ничего не изменилось и значения не были перекодированы.
например в приведенном ниже примере я ожидал, что значения «Австралия» будут заменены на «Австралия», но, похоже, ничего не произошло.
Это действительно базовая функция, но я не могу в жизни понять, почему она не работает - я бы очень приветствовал любые предложения относительно того, где я ошибаюсь.
Я посмотрел в Интернете и не могу найти ответы на этот вопрос.
Вот мой код ниже — набор данных называется studies
; исходная переменная называется Country
; новая переменная называется country_mod
.
#Create new, modified variable for country
studies$country_mod <- studies$Country
#Check what the different levels are
levels(studies$country_mod)
'Australia' 'Australia ' 'Belgium' 'Canada' 'Denmark' 'Estonia' 'Finland' 'France' 'Germany' 'Greece' 'Hong Kong' 'Hungary' 'Ireland' 'Israel' 'Italy' 'Japan' 'multiple' 'Netherlands' 'New Zealand' 'Norway' 'Poland' 'Portugal' 'Scotland' 'South Korea' 'Spain' 'Spain ' 'Sweden' 'Switzerland' 'Taiwan' 'UK' 'United Kingdom' 'United States' 'United States (Puerto Rico)' 'Uruguay' 'US Virgin Islands' 'USA' 'USA - Puerto Rico'
# Duplicate values for Australia - one has a space in it. Let's recode it.
studies$country_mod[studies$country_mod= = "Australia "] <- "Australia"
levels(studies$country_mod)
'Australia' 'Australia ' 'Belgium' 'Canada' 'Denmark' 'Estonia' 'Finland' 'France' 'Germany' 'Greece' 'Hong Kong' 'Hungary' 'Ireland' 'Israel' 'Italy' 'Japan' 'multiple' 'Netherlands' 'New Zealand' 'Norway' 'Poland' 'Portugal' 'Scotland' 'South Korea' 'Spain' 'Spain ' 'Sweden' 'Switzerland' 'Taiwan' 'UK' 'United Kingdom' 'United States' 'United States (Puerto Rico)' 'Uruguay' 'US Virgin Islands' 'USA' 'USA - Puerto Rico'
TLDR, перекодировка сработала, однако не меняет "Уровни" вашего фактора "Country_mod". Если вы вызовете table(studies$Country_mod)
, вы увидите таблицу с именами, представляющими значения, которые могут быть получены (все уровни фактора) наблюдениями в Country_mod
, связанными с числовым значением, указывающим, сколько строк фактически приняло это значение. Таким образом, ваш пример покажет 0
под "Australia "
после вашего перекодирования. Точно так же levels(studies$Country_mod)
по-прежнему будет печатать все исторические «уровни» фактора, независимо от того, принимают ли в настоящее время это значение какие-либо фактические наблюдения. Если, когда вы закончите очистку записей Country_mod
, вы используете функцию levels()
для изменения уровней, которые может принимать ваш фактор, то вы достигнете того, что, как я полагаю, вы ожидаете, будет результатом вашей процедуры перекодирования.
Для удаления пробелов может быть полезно использовать функцию
trimws
.