R вырезать Красиво-выводить Значения За Пределы Границ

#r #cut

Вопрос:

Есть ли в R какая-то функциональность, которая будет красиво выводить числовой вектор, преобразованный в коэффициент, когда некоторые значения выходят за рамки breaks ? Желаемый вход и выход-это

 data lt;- seq(5, 95, 10) result lt;- cutSpecial(data, breaks = c(30, 40, 50, 60, 70)) disc lt;- c("lt;30", "lt;30", "lt;30", "[30, 40)", "[40, 50)", "[50, 60)", "[60, 70)",   "gt;70", "gt;70", "gt;70") cbind(data, disc)  data disc   [1,] "5" "lt;30"   [2,] "15" "lt;30"   [3,] "25" "lt;30"   [4,] "35" "[30, 40)"  [5,] "45" "[40, 50)"  [6,] "55" "[50, 60)"  [7,] "65" "[60, 70)"  [8,] "75" "gt;70"   [9,] "85" "gt;70"  [10,] "95" "gt;70"   

Базовая cut функция R просто превращает значения, выходящие за пределы диапазона, в неудовлетворительные NA . Какова будет функция в экосистеме R cutSpecial ?

Ответ №1:

Это было бы chop() из моей santoku посылки:

 library(santoku) data lt;- seq(5, 95, 10) chop(data, c(30, 40, 50, 60, 70)) ## [1] [5, 30) [5, 30) [5, 30) [30, 40) [40, 50) [50, 60) [60, 70) [70, 95] [70, 95] ## [10] [70, 95] ## Levels: [5, 30) [30, 40) [40, 50) [50, 60) [60, 70) [70, 95]  

Если вам нужны конкретные ярлыки, вы можете либо передать их сами:

 chop(data, c(30, 40, 50, 60, 70), c("lt; 30", "[30-40)", "[40-50)", "[50-60)", "[60-70)", "gt;= 70"))  

Или в последней версии вы можете использовать lbl_dash() и указывать first и last :

 chop(data, c(30, 40, 50, 60, 70), labels = lbl_dash(first = "lt; 30", last = "gt;= 70")) ## [1] lt; 30 lt; 30 lt; 30 30 - 40 40 - 50 50 - 60 60 - 70 gt;= 70 gt;= 70 gt;= 70  ## Levels: lt; 30 30 - 40 40 - 50 50 - 60 60 - 70 gt;= 70  

Для меток интервалов по умолчанию такого аргумента нет, но, возможно, он должен быть.