cut
位于 base
包(package)。 说明
cut
将x
的范围划分为多个区间,并根据属于哪个区间对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),给出 |
labels |
结果类别级别的标签。默认情况下,标签是使用 |
include.lowest |
逻辑,指示“x[i]”是否等于最低(或最高,对于 |
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
表示格式化数字 b1
、 b2
、...时应使用的最小位数。如果需要区分任何对,将使用更大的值(最多 12 个)端点数:如果失败,将使用 "Range3"
等标签。格式化由 formatC
完成。
默认方法将对 breaks
的数值向量进行排序,但不需要其他方法,并且 labels
将对应于排序后的间隔。
来自R3.2.0,getOption("OutDec")
构建标签时会参考labels = NULL
.
值
返回 factor
,除非 labels = FALSE
产生级别代码的整数向量。
超出 breaks
范围的值将编码为 NA
,NaN
和 NA
值也是如此。
注意
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
用于根据组因子拆分变量; factor
、tabulate
、table
、findInterval
。
quantile
用于选择内容大致相等(而不是长度)的中断的方法。
.bincode
适用于 bare-bones 版本。
相关用法
- R cut.POSIXt 将日期或日期时间对象转换为因子
- R cumsum 累积和、乘积和极值
- R curlGetHeaders 从 URL 中检索标头
- R chartr 字符翻译和装箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R col 列索引
- R character 字符向量
- R c 将值组合到向量或列表中
- R conditions 状况处理和恢复
- R class 对象类
- R connections 操作连接的函数(文件、URL...)
- R comment 查询或设置“评论”属性
- R complex 复数和基本函数
- R chooseOpsMethod 选择适当的操作方法
- R colSums 形成行和列的总和及平均值
- R chol 乔列斯基分解
- R commandArgs 提取命令行参数
- R cbind 按行或列组合 R 对象
- R crossprod 矩阵叉积
- R cat 连接并打印
- R capabilities 此 R 版本的报告函数
- R callCC 调用当前延续
- R call 函数调用
- R charmatch 部分字符串匹配
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Convert Numeric to Factor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。