Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím cut

cut

Konvertovat proměnnou typu numeric na faktor

cut {base} Dokumentace R v češtině

Popis

cut rozděluje rozsah x na intervaly a kódouje hodnoty v x podle toho, do kterého intervalu spadají. Levý interval odpovídá úrovni první, další úrovni druhé a tak dále.

Použití

cut(x, ...)

## Výchozí S3 metoda:
cut(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = 3,
ordered_result = FALSE, ...)

Argumenty

x

vektor typu numeric, který má být konvertován na faktor pomocí řezání.

breaks

buď číselný vektor dvou nebo více jedinečných bodů řezu nebo jediné číslo (větší nebo rovno 2) udávající počet intervalů, do nichž má být x nařezáno.

labels

štítky pro úrovně výsledné kategorie. Ve výchozím nastavení jsou štítky konstruovány pomocí intervalové notace "(a,b]". Pokud jsou labels = FALSE, jsou namísto faktoru vráceny jednoduché kódy typu integer

include.lowest

proměnná typu logical indikující, zda by měla být zahrnuta hodnota ‘x[i]’ rovnající se nejnižší (nebo nejvyšší, pro right = FALSE) hodnotě ‘breaks’.

right

proměnná typu logical indikující, zda by intervaly měly být uzavřeny vpravo (a otevřeny vlevo) nebo naopak.

dig.lab

integer, které se používá, když labels nejsou zadány. Určuje počet číslic používaných při formátování čísel breaks.

ordered_result

logical: má být výsledek seřazeným faktorem?

...

další argumenty přenesené na jiné metody nebo z jiných metod.

Detaily

Když jsou breaks zadány jako jediné číslo, rozsah dat je rozdělen na kusy breaks stejné délky a potom jsou vnější hranice posunuty o 0,1% rozsahu, aby se zajistilo, že obě extrémní hodnoty spadají do intervalů break. (Pokud je x konstantní vektor, vytvoří se intervaly stejné délky, z nichž jeden obsahuje jedinou hodnotu.)

Je-li zadán parametr labels, jeho hodnoty se používají k označení úrovní faktorů. Není-li zadán žádný, jsou štítky úrovně faktoru konstruovány jako "(b1, b2]", "(b2, b3]" atd. pro right = TRUE a jako "[b1, b2)", ... pokud je right = FALSE. V tomto případě dig.lab indikuje, že při formátování čísel b1, b2, .... by se měl použít minimální počet číslic. V případě potřeby bude použita větší hodnota (až 12) pro rozlišení mezi libovolnými dvojicemi koncových bodů: pokud tohle zlyhá, budou použity labels jako například "Range3". Formátování se provádí pomocí formatC.

Výchozí metoda seřadí numerický vektor breaks, ale jiné metody se nevyžadují a labels budou odpovídat intervalům po třídění.

Od R 3.2.0, se konzultuje getOption("OutDec"), když jsou konstruovány štítky pro labels = NULL.

Hodnota

Je vrácen factor, pokud labels = FALSE, což vede k vektoru typu integer úrovňových kódů.

Hodnoty, které nespadají do rozmezí breaks, jsou kódovány jako NA, stejně jako hodnoty NaN a NA values.

Poznámka

Namísto table(cut(x, br)), je hist(x, br, plot = FALSE) efektivnější a méně náročný na paměť. Namísto cut(*, labels = FALSE), je findInterval() efektivnější.

Reference

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

Viz také

split pro rozdělení proměnné podle skupinového faktoru; factor, tabulate, table, findInterval.

kvantil pro způsoby výběru breaks zhruba stejného obsahu (spíše než délky).

.bincode pro základní verzi.

Příklady

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, b = 8))
table( cut(x, breaks = 3*(-2:5)))
table( cut(x, breaks = 3*(-2:5), right = FALSE))

##--- něktené hodnoty MIMO 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

## Konstrukce štítku:
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!

## Někdy výchozí dig.lab nestačí, aby se předešlo nejasnostem:
aaa <- c(1,2,3,4,5,2,3,4,5,6,7)
cut(aaa, 3)
cut(aaa, 3, dig.lab = 4, ordered = TRUE)

## jeden způsob, jak extrahovat hraniční body
labs <- levels(cut(aaa, 3))
cbind(lower = as.numeric( sub("\((.+),.*", "\1", labs) ),
upper = as.numeric( sub("[^,]*,([^]]*)\]", "\1", labs) ))

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity