альтернатива функции cut в R для data.tables - целочисленные переменные факторам - PullRequest
2 голосов
/ 19 марта 2020

Я хочу преобразовать целочисленную переменную hp в категориальную переменную, вырезанную на 10.

mtcars[, hp_cat := cut(hp, 
    breaks = c(0, 10, 20, 30 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, Inf), 
include.lowest = TRUE )]

Это дает желаемый результат, однако выписать все числа довольно утомительно. Есть ли более быстрый способ? Также в идеале альтернатива могла бы привести к более хорошим именам факторов.

Внимание: я хотел бы получить результат в data.table ... так что НЕТ dplyr.

Ответы [ 2 ]

3 голосов
/ 19 марта 2020

Просто используйте функцию последовательности. В зависимости от ситуации вы можете -Inf в качестве первого элемента в векторе. Также параметр label позволит вам назначать имена, это работает в следующем коде: labels = paste0("Group",2:length(BRKS))

BRKS <-    c( seq( 0 , 160, 10 ) , Inf )

mtcars[, hp_cat := cut(hp, breaks = BRKS , include.lowest = TRUE )]
0 голосов
/ 20 марта 2020

Другой вариант, который должен быть быстрее:

mtcars[, hp_cat2 := ceiling(hp/10)*10][hp_cat2 > 160, hp_cat2 := Inf]

Использование правильного предела в качестве наименования для ваших более хороших имен факторов

...