Una alternativa rápida a la función table de R
Una alternativa rápida a la función table de R
En el caso de querer realizar tablas de frecuencias unidimensionales de un vector en R, la función table
es muy lenta.
set.seed(123) x <- sample(-1:10,size=10^6,replace=TRUE) table(x)
Una versión mucho más rápida se consigue mediante rle
:
tt <- rle(sort(x)) ## Para una tabla de frecuncias, debe ir ordenado str(tt) tt$values[which.max(tt$lengths)] # Moda
que para un vector ordenado, devuelve el valor y las veces que aparece.
> tt <- rle(sort(x)) > str(tt) List of 2 $ lengths: int [1:12] 83406 82901 83316 83734 83367 83243 83169 83076 83510 83603 ... $ values : int [1:12] -1 0 1 2 3 4 5 6 7 8 ... - attr(*, "class")= chr "rle" > tt$values[which.max(tt$lengths)] # Moda [1] 2
Según la definición de rle
, esta función compute the lengths and values of runs of equal values in a vector.
Otra posibilidad consiste en emplear tabulate
, el núcleo de la función table
.