Una de las cosas que olvidé mencionar en mi publicación anterior fue que el método de búsqueda de matrices se adapta mal a los datos de caracteres. El código en Establecer operaciones usando matrices.JSL contiene la función mapaCadena que convierte una cadena de caracteres compuesta por letras minúsculas en un valor numérico. Este mapeo ralentiza considerablemente las cosas. En una publicación relacionada , @Adi-B Se le preguntó acerca de realizar una búsqueda y reemplazo en una columna de la tabla de datos. Nuevamente, estamos tratando con un mapeo de una cadena a otra cosa (en este caso, otra cadena).
Esto lleva al desafío de este mes: ¿Cuál es la forma más rápida de asignar un conjunto de valores a un nuevo conjunto de valores?
- Para datos continuos, a menudo tiene sentido agrupar los valores en cuantiles, siendo posiblemente los deciles (es decir, 10 grupos) los más comunes. Escribe una función, grupocuantil( invec , cuantitativo ) , que toma un vector y un entero positivo mayor que uno y devuelve el grupo cuantil al que pertenecen los valores de entrada. Por ejemplo, si
invec = [1,2,3,4,5,6,7,8,9] y cuantitativo = 3
la función volvería [1,1,1,2,2,2,3,3,3] .
Tendrá que decidir cómo tratar los valores que se encuentran a ambos lados de un límite de grupo cuantil, especialmente si hay duplicados.
- Cuando se trata de muchos datos categóricos nivelados, con frecuencia tiene sentido agregar niveles con recuentos bajos en un solo nivel. Crear una función agregadoLowCounts( en lista ) que toma una lista de entrada de valores categóricos y devuelve una lista que asigna los valores con recuentos altos a sí mismos y los valores con recuentos bajos a un único grupo nuevo. Cómo determinar el valor límite para recuentos bajos es parte del desafío.
- Refiriéndose a la publicación mencionada anteriormente , crea una función encontrar y reemplazar( en lista , aaMapa ) que toma una lista de cadenas y, para cada elemento, realiza un mapeo utilizando una matriz asociativa proporcionada como segundo argumento, de una subcadena a una nueva subcadena. Esta asignación puede ser uno a uno o muchos a uno.
- (Crédito adicional) ¿Se puede buscar una lista de cadenas de caracteres más rápido que ubicación ? El propósito de mapaCadena era convertir una cadena en un número para que Ubicación ordenada , que utiliza una búsqueda binaria, podría usarse. Ubicación ordenada es considerablemente más rápido que ubicación . Intenta crear una función, locCadenaOrdenada( lista de cadenas , en cadena ) que encuentra la posición de la cuerda en cadena de la lista ordenada de cadenas lista de cadenas . Es difícil imaginar crear algo más rápido que ubicación sin conocimiento a priori de los posibles valores de cadena que pueden ocurrir. Con esto en mente, supongamos que todas las cadenas provendrán de la lista de palabras que usamos en Reto 1 . Se adjunta a continuación.
¡Buena suerte!