UP | HOME |

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.