Замена значений с помощью условных - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть набор данных, относящихся к различным исследованиям (представлен в строках), со столбцами, содержащими информацию о стране, количестве участников и т. Д.

Я хочу очистить данные по стране, так как есть небольшие ошибки, например, лишние пробелы, разные варианты написания / сокращения и т. д.

Для этого я создал новую переменную 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'

1 Ответ

1 голос
/ 10 апреля 2019

TLDR, перекодировка сработала, однако она не меняет «Уровни» вашего фактора «Country_mod».Если вы вызовете table(studies$Country_mod), вы увидите таблицу, имена которой представляют возможные значения (все уровни фактора) из наблюдений в Country_mod, связанных с числовым значением, указывающим, сколько строк на самом деле приняли это значение.Таким образом, ваш пример покажет 0 ниже "Australia " после вашего перекодирования.Точно так же levels(studies$Country_mod) будет по-прежнему печатать все исторические «уровни» фактора, независимо от того, принимают ли какие-либо фактические наблюдения в настоящее время это значение.Если, когда вы закончите очистку записей Country_mod, вы используете функцию levels(), чтобы изменить уровни, которые может принять ваш фактор, тогда вы достигнете того, чего, как я полагаю, вы ожидаете, будет результатом вашего перекодирования.процедура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...