Ниже приведена легкая версия того, что я пытаюсь сделать. У меня есть следующий вектор:Создание переменной из состояния с более чем двумя аргументами
wage = 1:10 # Generate a sequence from 1 to 10
И я хочу, чтобы создать еще один вектор wage_level
, что:
(я) wage_level
является "low"
если wage
меньше 5
(б) wage_level
является normal
если wage
равен 5
(iii) wage_level
является high
если wage
больше 5
Я знаю, что могу использовать вложенные ifelse
заявления, чтобы сделать это, однако, как я уже указывал ранее, это лишь упрощенная версия того, что я действительно хочу сделать, потому что у меня есть около 15 вариантов ,
Редактировать
Ответ приводится ниже использует функции cut()
, которая на самом деле работает хорошо во многих случаях. Однако в моем случае это, похоже, не «работает». Ниже приводится подробное объяснение.
Я был в состоянии использовать функцию cut()
создать wage_level
вектор:
wage = runif(10, 1, 10) # Randomly generate 10 values between 1 and 10
# Here I use the cut() function
wage_level = cut(wage,
breaks = c(1, 4, 6, 10),
labels = c("low", "normal", "high"),
include.lowest = TRUE)
> wage
[1] 5.522422 4.793292 8.161671 5.480415 1.396909 3.403013 4.940242 7.762142 6.364159 4.603998
> wage_level
[1] normal normal high normal low low normal high high normal
Levels: low normal high
Теперь, давайте предположим, что я хочу использовать wage_level
вектор для создания другого вектора (rating
вектора) с помощью функции cut()
. Условие для создания rating
вектора выглядит следующим образом:
(я) rating
является "1"
, если wage_level
меньше "low"
(II) rating
является 2
, если wage_level
равно "normal"
(III) rating
составляет 3
, если wage_level
больше "high
Моя проблема t шляпа, используя функцию cut()
, не будет делать вектор rating
a numeric
вектор будет значений по моему выбору. Следующий код не работает:
rating = cut(as.numeric(wage_level),
breaks = c(0, 1, 2, 3),
labels = c(1.2, 6.5, 8.9),
include.lowest = TRUE)
> as.numeric(rating)
[1] 2 2 3 2 1 1 2 3 3 2
я в основном две проблемы здесь:
(я), я предпочел бы способ использовать фактические строки (например, «низкий», «нормальный» и " высокий ") вместо индексов меток
(ii) Значения в векторе rating
не имеют ничего общего со значениями, указанными мной.
Любой другой способ достижения желаемого результата?
Большое спасибо за вашу помощь :)
Возможно, вы ищете 'cut()' – ndoogan
@ndoogan - это место. Я обнаружил, что, работая с большим количеством интервальных разрывов, полезно, чтобы 'breaks' и' labels 'были их собственными переменными, которые часто создавались с помощью 'seq' и' paste0' –
@ndoogan. вопрос, не могли бы вы взглянуть? – SavedByJESUS