2013-06-19 4 views
2

У меня есть числовое поле в кадре данных, таких как ежемесячный доход, диапазон отличается от INR 15000 до INR 60000.Как создать столбцы факторов на основе диапазона без использования ifelse?

Я хочу новое поле сказать income_group, который будет иметь номер, соответствующий диапазону доходов сказать менее 15000 - 1, более 15000, но менее 30000 - 2 и так далее.

Один подход заключается в использовании вложенного IfElse заявления как этого

mydataframe$incomegp <- ifelse(monthincome_condition, assign_number, 
           ifelse statement and so on) 

Но поскольку у меня есть около 7 разного количества относящегося к этой области, так что я искал более элегантное решение. Также номера для классификации не являются последовательными, например. 1, 3, 5, 7, 9, 12, 15.

Я новичок в R, может кто-нибудь предложить несколько альтернатив, которые не требуют гнездования?

Пример будет большим и поможет мне.

+1

Используйте 'cut()' для этого. – Andrie

+0

ok Я проверю функцию и посмотрю, могу ли я сделать это. Благодарю. – Poptimist

ответ

5

Следующий фрагмент кода использует cut разрезать вектор данных на 4 категории (5 брейков), пример с R встроенной команды набора данных:

with(mtcars, cut(mpg, seq(min(mpg) * 0.99, 
          max(mpg) * 1.01, 
          length = 5))) 

Следует заметить, что я добавляю * 0.99 и * 1.01, потому что если вы установите их на минимальные и максимальные данные, данные, равные этому min/max, будут отмечены как NA.

Если вы знаете свои перерывы заранее, вы можете просто указать их вручную в векторе (c(break_value1, break_value2, etc)) вместо генерации их на лету, используя seq.

+0

Я пытаюсь сделать этот пример на разрезе, где aaa-> c (1,2,3,4,5,6,7,8,9,10). Теперь я использую этот разрез (aaa, c (0.9.2.9.5.9), метки = c («A», «B», «C»)). То, что я хочу сделать, чтобы обозначить 1,2 как A 3,4,5 как B и остальное как C. Но это порождает ошибку «конфликт меток/прерываний длины». Поскольку я упоминаю три перерыва и три ярлыка, почему я получаю эту ошибку. Я думаю, что это нужно для ответа на мой исходный вопрос. – Poptimist

+1

Помните, что три разрыва приводят к двум меткам: <1,2>, <2,3> и что ваш пример приводит к ряду значений NA: это работает cut (1:10, c (0.9, 2.9, 5.9), labels = c (' А», 'В')). –

+0

решение и объяснение действительно к делу и полезны. Благодарю. – Poptimist

Смежные вопросы