#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
Для меток интервалов по умолчанию такого аргумента нет, но, возможно, он должен быть.