当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R cut 将数字转换为因子


R语言 cut 位于 base 包(package)。

说明

cutx 的范围划分为多个区间,并根据属于哪个区间对x 中的值进行编码。最左边的间隔对应于第一级,下一个最左边的间隔对应于第二级,依此类推。

用法

cut(x, ...)

## Default S3 method:
cut(x, breaks, labels = NULL,
    include.lowest = FALSE, right = TRUE, dig.lab = 3,
    ordered_result = FALSE, ...)

参数

x

要通过切割转换为因子的数值向量。

breaks

两个或多个唯一切割点的数值向量或单个数字(大于或等于 2),给出 x 要切割成的间隔数。

labels

结果类别级别的标签。默认情况下,标签是使用 "(a,b]" 间隔表示法构造的。如果 labels = FALSE ,则返回简单整数代码而不是因子。

include.lowest

逻辑,指示“x[i]”是否等于最低(或最高,对于 right = FALSE )‘breaks’ 值。

right

逻辑,指示间隔是否应在右侧关闭(并在左侧打开),反之亦然。

dig.lab

未给出标签时使用的整数。它确定用于格式化中断编号的位数。

ordered_result

逻辑:结果应该是有序因子吗?

...

传入或传出其他方法的进一步参数。

细节

breaks指定为单个数字时,数据范围被分成等长的breaks块,然后将外部限制移开范围的0.1%,以确保极值都落在范围内休息间隔。 (如果 x 是常量向量,则创建 equal-length 间隔,其中之一包含单个值。)

如果指定了 labels 参数,则其值用于命名因子水平。如果未指定,则因子级别标签将构造为 "(b1, b2]""(b2, b3]" 等(对于 right = TRUE )以及 "[b1, b2)" ,...(如果 right = FALSE )。在这种情况下, dig.lab 表示格式化数字 b1b2 、...时应使用的最小位数。如果需要区分任何对,将使用更大的值(最多 12 个)端点数:如果失败,将使用 "Range3" 等标签。格式化由 formatC 完成。

默认方法将对 breaks 的数值向量进行排序,但不需要其他方法,并且 labels 将对应于排序后的间隔。

来自R3.2.0,getOption("OutDec")构建标签时会参考labels = NULL.

返回 factor,除非 labels = FALSE 产生级别代码的整数向量。

超出 breaks 范围的值将编码为 NANaNNA 值也是如此。

注意

hist(x, br, plot = FALSE)table(cut(x, br)) 更高效且更少占用内存。 findInterval()cut(*, labels = FALSE) 更高效。

例子

Z <- stats::rnorm(10000)
table(cut(Z, breaks = -6:6))
sum(table(cut(Z, breaks = -6:6, labels = FALSE)))
sum(graphics::hist(Z, breaks = -6:6, plot = FALSE)$counts)

cut(rep(1,5), 4) #-- dummy
tx0 <- c(9, 4, 6, 5, 3, 10, 5, 3, 5)
x <- rep(0:8, tx0)
stopifnot(table(x) == tx0)

table( cut(x, breaks = 8))
table( cut(x, breaks = 3*(-2:5)))
table( cut(x, breaks = 3*(-2:5), right = FALSE))

##--- some values OUTSIDE the breaks :
table(cx  <- cut(x, breaks = 2*(0:4)))
table(cxl <- cut(x, breaks = 2*(0:4), right = FALSE))
which(is.na(cx));  x[is.na(cx)]  #-- the first 9  values  0
which(is.na(cxl)); x[is.na(cxl)] #-- the last  5  values  8


## Label construction:
y <- stats::rnorm(100)
table(cut(y, breaks = pi/3*(-3:3)))
table(cut(y, breaks = pi/3*(-3:3), dig.lab = 4))

table(cut(y, breaks =  1*(-3:3), dig.lab = 4))
# extra digits don't "harm" here
table(cut(y, breaks =  1*(-3:3), right = FALSE))
#- the same, since no exact INT!

## sometimes the default dig.lab is not enough to be avoid confusion:
aaa <- c(1,2,3,4,5,2,3,4,5,6,7)
cut(aaa, 3)
cut(aaa, 3, dig.lab = 4, ordered_result = TRUE)

## one way to extract the breakpoints
labs <- levels(cut(aaa, 3))
cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs) ),
      upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs) ))

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

split 用于根据组因子拆分变量; factortabulatetablefindInterval

quantile 用于选择内容大致相等(而不是长度)的中断的方法。

.bincode 适用于 bare-bones 版本。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Convert Numeric to Factor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。