Использование dplyr для обозначения областей

#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))