#r #dplyr
#r #dplyr
Вопрос:
Я пытаюсь создать столбец area в наборе данных, где я указываю диапазон координат, и он должен вводить соответствующую область на основе условия. Код, который я использовал, выглядит следующим образом:
Я использовал dplyr и с несколькими ifelse, чтобы сделать это, но, похоже, это не дает мне правильного результата.
train = train %>%
mutate(area = ifelse(cood < 3750023.25, 'Area 1',
ifelse(3750023.25 >= cood amp; cood < 3759048.50, 'Area 2',
ifelse(3759048.50 >= cood amp; cood < 3768073.75, 'Area 3',
ifelse(3768073.75 >= cood, 'Area 4', NA)))))
Результаты на самом деле не соответствуют тому, что я должен ожидать. например, первая строка имеет код 3751013, но она дает мне область 3, когда она должна давать мне область 2. Что может быть не так в этом?
Комментарии:
1. используйте
case_when
функцию.2. Лучше использовать
cut
вместо3. 3751013 не присваивается «Области 2», поскольку он не удовлетворяет требованиям вашего
ifelse()
:3750023.23 >= 3751013 = FALSE
4. @djfinnoy это была именно проблема, спасибо! Это была просто путаница в вычислениях
Ответ №1:
Как сказано в комментариях, используйте case_when
.
train = train %>%
mutate(area = case_when(cood < 3750023.25 ~ 'Area 1',
3750023.25 >= cood amp; cood < 3759048.50 ~ 'Area 2',
3759048.50 >= cood amp; cood < 3768073.75 ~ 'Area 3',
3768073.75 >= cood ~ 'Area 4',
TRUE ~ NA))