當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。