Есть ли способ создать новую функцию df с несколькими уровнями факторов в одной строке?

#r

#r

Вопрос:

Есть ли способ добавить столбец с несколькими уровнями факторов, которые зависят от существующего столбца, во фрейм данных в одной строке? Изменится ли ответ, если в новом столбце будет два уровня факторов, а не более двух?

 #two factor level example
df <- mtcars

df$mpg_rating <- "bad"
df$mpg_rating[df$mpg>30] <- "good"
  
 #three factor level example
df <- mtcars

df$mpg_rating <- "bad"
df$mpg_rating[df$mpg>20] <- "ok"
df$mpg_rating[df$mpg>30] <- "good"
  

Я хотел бы создать «mpg_rating» в 1 строке вместо 2 или 3

Комментарии:

1. Здесь может быть полезна cut функция. Проверьте cut(x = mtcars$mpg, breaks = ((1:4) * 10), labels = c("bad", "ok", "good")) .

Ответ №1:

Используя cut

 transform(df, mpg_rating=cut(mpg, breaks=c(-Inf, 20, 30, Inf), labels = c("bad", "ok", "good")))
  

Ответ №2:

Однострочный вариант был бы с findInterval

 df$mpg_rating <- with(df, c("bad", "ok", "good")[findInterval(mpg, c(20, 30)) 1])
  

ПРИМЕЧАНИЕ: Она хорошо умещается в одной строке