El paquete está en pleno desarrollo, por el momento sólo contamos con 7 funciones:
- limpiecito: Esta función limpia elementos o vectores caracter, quitando las tildes, espacios en blanco al inicio, entre caracteres y al final. Tiene la opción de arrojar los resultados en minúsculas o mayúsculas.
- estadisticos: Esta función permite calcular los principales estadísticos como: la media, mediana, desviación estándar, mínimo, máximo, coeficiente de variación y el total de observaciones.
- dpto_peru: Esta función permite convertir el ubigeo de las regiones de Perú a su descripción, es decir, al nombre de la región.
- n_percentil: Esta función permite calcular el número de elementos de un vector que pertenecen a un determinado percentil. Arroja los resultados mostrando los puntos de corte o por bloques determinados por el percentil.
- test_grubbs: Test que permite determinar si un elemento de un vector es outliers, mediante el test de grubss. Esta función tiene la opción de arrojar como resultado un valor lógico o todos los estadísticos de grubbs que se usaron para determinar si es o no outliers.
- grubss_total: Esta función realiza, el test de grubbs, que sirve para determinar si uno o varios elementos del vector son outliers.
- area_quantile: Esta función grafica la funciones de densidad y divide el gráfico por percetiles.
- bcrp: Esta función permite descargar las series económicas del BCRP automáticamente usando el método de web scraping.
- oracion: Esta función permite colocar texto en formato oración, como se podría hacer en un documento word.
Para usar el paquete primero se tiene que instalar el paquete devtools
(si aún no lo tienes instalado).
install.packages("devtools")Una vez instalado devtools, se procede a descargar el paquete
datametria, para lo cual digitamos el siguiente código:
devtools::install_github("CesarAHN/datametria")Una vez descargado, se tiene que cargar el paquete datametria. Para
esto corremos el siguiente código:
library(datametria)En la documentación puede ver el argumento tipo con el cual podrá
obtener resultados en minúsculas o con el texto del formato o solo
quitar espacios.
La función limpiecito() es una función para limpiar espacios por demás
al inicio, final o intermedio. Asimismo elimina tildes y arroja los
resultados en letras mayúsculas o minúsculas. Esta función sólo recibe
dos parámetros: x que es un elemento o vector caracter y capital que
es un valor lógico que si toma el valor de TRUE arrojará los
resultados en mayúsculas, mientras que si toma el valor FALSE arrojará
los resultados en minúsuculas, el valor por defecto es TRUE.
Veamos un ejemplo de uso.
Si se tiene el siguiente vector:
x<-c(" mucho espacio", "VAYA de espacios ", "CÓMO se hicieron tantos espacios ")
x
# [1] " mucho espacio"
# [2] "VAYA de espacios "
# [3] "CÓMO se hicieron tantos espacios "Como se puede ver el vector x tiene 3 elementos caracter y cada
elemento tienen más de un espacio ya sea al inicio, intermedio o fin,
además hay palabras con mayúscula y minúsculas, y por último, palabras
con tildes. Entonces, si queremos que el vector x tenga una estructura
homogénea tendremos que usar la función limpiecito().
Veamos como:
# Si deseamos que los resultados del vector x sean mayúsculas.
limpiecito(x)
# [1] "MUCHO ESPACIO" "VAYA DE ESPACIOS"
# [3] "COMO SE HICIERON TANTOS ESPACIOS"Gracias a la función limpiecito() se ha podido eliminar los espacios y
homogenizar las palabras quitandole las tíldes y convirtiendo todo a
mayúscula.
Esta función se usa para calcular los principales estadísticos como: la
media, mediana, desviación estándar, mínimo, máximo, coeficiente de
variación y el total de observaciones. Solo recibe 2 argumentos: x que
tiene que ser un vector numérico y miss que toma un valor lógico, si
es TRUE entonces para el cálculo de los estadísticos no se toma en
cuenta los missings values, por el contrario si es FALSE si se
toma en consideración los missings values.
Veamos un ejemplo de como usarlo. Pero primero carguemos una tabla de
datos gender, para cargarlo usamos la siguiente sintaxis.
set.seed(2026)
df <- as.data.frame(matrix(sample(5:20, 1000, TRUE), ncol = 5))
names(df) <- c("Manzana", "Banana", "Naranja", "Uva", "Mango")
# Viendo las 5 primeras filas del data frame.
head(df)
# Manzana Banana Naranja Uva Mango
# 1 17 12 11 6 17
# 2 13 7 11 19 7
# 3 5 15 19 16 8
# 4 10 10 18 11 15
# 5 17 20 12 11 11
# 6 19 10 18 6 14Entonces si nosotros queremos sacar los principales estadísticos de los
ingresos vamos a usar la función estadisticos().
estadisticos(df$Manzana)
# [,1]
# MEDIA 12.150
# MEDIANA 12.000
# DESV.STAND. 4.717
# MÍNIMO 5.000
# MÁXIMO 20.000
# COEF.VARIACIÓN 0.388
# N 200.000En efecto, hemos logrado obtener los principales estadísticos de los ingresos. Pero si deseo no solo de los ingresos sino también de los años de educación y los años de experiencia, entonces usaría la siguiente sintaxis.
do.call(cbind,lapply(df[,1:3], estadisticos))
# [,1] [,2] [,3]
# MEDIA 12.150 12.440 12.780
# MEDIANA 12.000 12.000 13.000
# DESV.STAND. 4.717 4.597 4.533
# MÍNIMO 5.000 5.000 5.000
# MÁXIMO 20.000 20.000 20.000
# COEF.VARIACIÓN 0.388 0.370 0.355
# N 200.000 200.000 200.000Esta función nos permite obtener los nombres de las regiones cuando
ingresamos el número de ubigeo, también si sólo le indicamos los cuatro
o dos primeros números del ubigeo. Sólo necesita un argumento el cual es
x que es un elemento o vector numérico o caracter.
Para ver un ejemplo carguemos la tabla de datos de la ENAHO del 2019, en donde se tiene en consideración el ubigeo de los encuestados.
set.seed(123)
ubigeos <- sprintf("%06d", sample(1:250000, 300, replace = FALSE))
df <- data.frame(ubigeos = ubigeos)head(df)
# ubigeos
# 1 182735
# 2 188942
# 3 134058
# 4 124022
# 5 160997
# 6 226318Vemos que la variable ubigeo es una vector con elementos de 6 caracteres. Entonces, si nosotros queremos colocar los nombres de las regiones dado este ubigeo, tedríamos que usar la siguiente sintaxis.
df$region<-dpto_peru(df$ubigeos)Viendo las 5 primeras filas.
head(df)
# ubigeos region
# 1 182735 MOQUEGUA
# 2 188942 MOQUEGUA
# 3 134058 LA LIBERTAD
# 4 124022 JUNIN
# 5 160997 LORETO
# 6 226318 SAN MARTÍNEn efecto podemos ver que en la columna región ahora se muestran los nombres de las regiones.
Pero se puede dar el caso que sólo tienes un vector en donde sólo se tiene los dos primeros dígitos del ubigeo. Hagamos un ejemplo, en donde se muestre el vector con sólo dos caracteres.
# Para esto se usará la función substring.
df$region2<-substring(df$ubigeos, 1,2)
# Convirtiendo este vector para que arroje los nombres de las regiones.
df$region2_a<-dpto_peru(df$region2)
# Viendo las 5 primeras filas.
head(df)
# ubigeos region region2 region2_a
# 1 182735 MOQUEGUA 18 MOQUEGUA
# 2 188942 MOQUEGUA 18 MOQUEGUA
# 3 134058 LA LIBERTAD 13 LA LIBERTAD
# 4 124022 JUNIN 12 JUNIN
# 5 160997 LORETO 16 LORETO
# 6 226318 SAN MARTÍN 22 SAN MARTÍNEn efecto, se ha obtenido los nombres de las regiones.
Esta función también sirve si sólo tienes en consideración los 4 primeros caracteres del ubigeo, incluso si el vector de ubigeos es numérico.
Veamos un ejemplo para el caso de vectores numéricos.
# Vamos a convertir a numérico el vector region2 que tiene sólo dos caracteres.
df$region3<-as.numeric(df$region2)
# Convirtiendo este vector para que arroje los nombres de las regiones.
df$region3_a<-dpto_peru(df$region3)
# Viendo las 5 primeras filas.
head(df)
# ubigeos region region2 region2_a region3 region3_a
# 1 182735 MOQUEGUA 18 MOQUEGUA 18 MOQUEGUA
# 2 188942 MOQUEGUA 18 MOQUEGUA 18 MOQUEGUA
# 3 134058 LA LIBERTAD 13 LA LIBERTAD 13 LA LIBERTAD
# 4 124022 JUNIN 12 JUNIN 12 JUNIN
# 5 160997 LORETO 16 LORETO 16 LORETO
# 6 226318 SAN MARTÍN 22 SAN MARTÍN 22 SAN MARTÍNY el resultado es
# Creando la tabla.
table(df$region)
#
# AMAZONAS ANCASH APURIMAC AREQUIPA AYACUCHO
# 6 12 9 21 9
# CAJAMARCA CALLAO CUSCO HUANCAVELICA HUANUCO
# 14 12 14 11 12
# ICA JUNIN LA LIBERTAD LAMBAYEQUE LIMA
# 14 12 14 16 9
# LORETO MADRE DE DIOS MOQUEGUA PASCO PIURA
# 11 5 17 8 13
# PUNO SAN MARTÍN TACNA TUMBES
# 13 15 8 13Esta función permite calcular el número de elementos de un vector que
pertenecen a un determinado percentil. Arroja los resultados mostrando
los puntos de corte o por bloques determinados por el percentil. Esta
función tiene 3 argumentos: x que tiene que ser un vector numérico,
len que es el número de cortes que se desea realizar, el valor por
defecto es 4, es así que arrojará el número de elementos por cuartiles.
Por último, el argumento p_corte que es un valor lógico que toma el
valor por defecto de TRUE, lo que indica que en los resultados se
muestre el número de puntos de corte, en el caso de que len sea 4,
entonces mostrará los elementos en 4 bloques; y si toma el valor de
FALSE entonces mostrará los resultados con los puntos de corte.
Veamos algunos ejemplos, pero primero cargamos la tabla de datos gender.
set.seed(2026)
df <- as.data.frame(matrix(sample(5:20, 1000, TRUE), ncol = 5))
names(df) <- c("Manzana", "Banana", "Naranja", "Uva", "Mango")
head(df)
# Manzana Banana Naranja Uva Mango
# 1 17 12 11 6 17
# 2 13 7 11 19 7
# 3 5 15 19 16 8
# 4 10 10 18 11 15
# 5 17 20 12 11 11
# 6 19 10 18 6 14Vamos a calcular el número de personas por cuartil de los ingresos.
Recordar que el cuartil divide en 4 a nuestros datos y el valor por
defecto de len es 4.
n_percentil(df$Manzana)
# [,1]
# [5,8] 58
# (8,12] 46
# (12,16] 47
# (16,20] 49En efecto, calcula el número de elementos por cuartil. Así tenemos que en el primer cuartil hay 125 elementos que van desde 5 a 21.5, luego 150 elementos desde mayores a 21.5 y menores iguales 24.8 y así sucesivamente.
Pero si no deseamos verlo con los puntos de corte y sólo queremos ver
los bloques por percentil, entonces, tendremos que usar el argumento
p_corte y asignarle el valor de FALSE. Veamos un ejemplo, pero ahora
para los quintiles.
n_percentil(df$Manzana, len = 3, p_corte = FALSE)
# [,1]
# 1 76
# 2 57
# 3 67Podemos ver que en el primer tercil se encuentran 175 elementos, igual en el segundo tercil, por último, el tercer tercil cuenta con 150 elementos.
Esta función nos permite determinar si un elemento de un vector es outliers, mediante el test de grubss. Esta función tiene la opción de arrojar como resultado un valor lógico o todos los estadísticos de grubbs que se usaron para determinar si es o no outliers.
Esta función tiene 5 argumentos: x1 es el elemento del cual se desea
saber si es un outliers, x es el vector numérico que contiene a x1,
alpha indica el nivel de significancia con los que se desea realizar
el test de grubbs, esto nos permite calcular el valor o valores críticos
del test, su valor por defecto es de 0.05 (5%), num_colas es un valor
numérico que toma por defecto 2, lo que indica que el análisis se hará a
dos colas y si toma el valor de 1, el análisis se hará a una cola, por
último, el argumento vista que es un elemento lógico en donde si toma
el valor de TRUE entonces se muestren el valor estadístico del test de
grubbs, el valor crítico del test de grubbs, la comparación que se hace
y el resultado que es un valor lógico TRUE o FALSE, donde TRUE indica
que el elemento es un outliers.
Para ver un ejemplo, carguemos la tabla de datos llamada outlier.
set.seed(2025)
df <- as.data.frame(matrix(sample(5:20, 100, TRUE), ncol = 5))
names(df) <- c("Manzana", "Banana", "Naranja", "Uva", "Mango")
# Introducir outliers
df$Manzana[c(3, 15)] <- c(100, 120)
df$Banana[10] <- 95
df$Naranja[c(5, 18)] <- c(110, 105)
df$Uva[7] <- 90
df$Mango[c(2, 20)] <- c(130, 140)
# Veamos las 5 primeras filas.
head(df)
# Manzana Banana Naranja Uva Mango
# 1 17 19 9 15 9
# 2 16 18 8 11 130
# 3 100 9 14 7 17
# 4 14 20 20 13 19
# 5 5 19 110 15 9
# 6 11 17 5 20 20Podemos darnos cuenta que el segundo elemento del vector Mango es 130
y quizá pueda ser un outlier. Entonces, veamos si el primer elemento de
la variable Mango es un outlier.
test_grubbs(df$Mango[2], df$Mango, vista = FALSE)
# [1] TRUEComo podemos ver con df$Mango[2] le estamos diciendo que seleccione al
primer elemento del vector df. Y nos arrojó el valor de TRUE, lo
cual indica que el primer elemento de la variable Mango es un outlier.
Recordar que el test lo realizó a dos colas y con un nivel de significancia del 0.05. Pero como se mencionó anteriormente, podemos ver el estadístico de grubbs, su valor crítico y la elección.
test_grubbs(df$Mango[2], df$Mango)
# $Grubbs_test
# [1] 2.774028
#
# $Grubbs_critico
# [1] 2.708246
#
# $Elección
# [1] "2.77402816132735>2.70824564580575"
#
# $Resultado
# [1] TRUEEn efecto, el estadistico de grubss es de 5.1482 y el valor crítico de es de 3.036 y si comparamos podemos ver que el estadístico de grubbs es mayor al valor crítico, por tanto, es un outlier.
Pero si nosotros deseamos calcular si más de un elemento es un valor
outlier entonces, tendríamos que recurrir a un for, pero no será
necesario ya que contamos con la función grubbs_total que puede hacer
todo el procedimiento sin necesidad de hacer el for.
Esta función realiza, el test de grubbs, pero a más de un elemento.
Esta función sólo cuenta con tres argumentos: x que es el vector de
donde se desea saber el número de elementos que podrían ser outliers,
esea saber si es un outliers, x es el vector numérico que contiene a
x1, alpha que indica el nivel de significancia con los que se desea
realizar el test de grubbs, esto nos permite calcular el valor o valores
críticos del test, su valor por defecto es de 0.05 (5%), num_colas es
un valor numérico que toma por defecto 2, lo que indica que el análisis
se hará a dos colas y si toma el valor de 1, el análisis se hará a una
cola.
A continuación se muestra el ejemplo:
head(df)
# Manzana Banana Naranja Uva Mango
# 1 17 19 9 15 9
# 2 16 18 8 11 130
# 3 100 9 14 7 17
# 4 14 20 20 13 19
# 5 5 19 110 15 9
# 6 11 17 5 20 20Entonces, si nosotros queremos saber cuales de esos valores son outliers
por el método de grubbs, tendremos que usar nuestra función
grubbs_total.
grubbs_total(df$Manzana)
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [13] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSEEsta función nos permite graficar la funciones de densidad de una variable y divide el gráfico por percetiles, por tanto, nos devuelve sub áreas del gráfico de densidad.
la función tiene 6 argumentos: x es el vector numérico del cual se
desea graficar el gráfico de densidad, len es un elemento numérico que
nos indica el número de cortes que se le desea hacer al gráfico de
densidad, su valor por defecto es 4 lo que indica que la gráfica se
cortará por cuartiles, color_area es un elemento numérico o vector
caracter que indica el número de colores con los que se desea pintar las
sub áreas del gráfico de densidad, su valor por defecto es NA, lo que
indica que tomará el número de colores que se especificó en len y
tomará los colores de la función terrain.colors, por otro lado si
desea que sólo se pinte de dos colores entonces, usted tendra que
colocar el número 2, e igualmente usará los colores de la función
terrain.colors, pero si desea asignarle los colores que usted desea
entonces tendrá que colocar los nombres o códigos de los colores,
col_border es un elemento caracter que se usa para especificar el
color de los bordes que dividen las sub áreas, el color por defecto es
“black”. titulo es un elemento caracter y especifica el título que se
le desea colocar a la gráfica, el valor por defecto es vacio, dureza
es un elemento numérico que indica el grosor de la línea que divide las
sub áreas, es el mismo argumento que lwd de la función plot. Su valor
por defecto es 2, por último ... indican otros argumentos que se
pueden usar en la función plot, estos argumentos afectarán al plot, pero
no a las sub áreas. Por ejemplo, puede usar xlab, font, sub,
bty, etc. Pero no puede usar el argumento main, ya que ya está
especificado con el argumento título.
Para poder verlo mejor veamos un ejemplo. Para esto se usa la tabla de
datos partyid4 que es de un estudio de las elecciones de estados
unidos.
set.seed(2026)
df <- as.data.frame(matrix(sample(5:20, 2000, TRUE), ncol = 5))
names(df) <- c("Manzana", "Banana", "Naranja", "Uva", "Mango")
# Viendo las primeras 5 filas.
head(df)
# Manzana Banana Naranja Uva Mango
# 1 17 11 17 19 6
# 2 13 11 7 19 7
# 3 5 19 8 12 7
# 4 10 18 15 6 16
# 5 17 12 11 11 15
# 6 19 18 14 10 15Vamos a graficar la densidad de la variable Manzana y dividirlo por
cuartiles.
area_quantile(df$Manzana)En efecto, obtenemos el gráfico de densidad de la edad por cuartiles. Como se mencionó anteriormente, podemos usar otros argumentos para mejorar este gráfico. Para el caso se puede usar los argumentos xlab y ylab y cambiar de colores.
area_quantile(df$Manzana,
xlab="Manzana", ylab="Densidad", color_area=c("darkolivegreen1","dodgerblue","gold1","orangered"))Incluso podemos juntar esta salida con la función n_percentil(), para
poder saber el número de elementos por sub áreas. Veamos como las
unimos.
# Definiendo el número de elementos por cuartil.
cuartiles<-n_percentil(df$Manzana)
area_quantile(df$Manzana,
xlab="Manzana", ylab="", color_area=c("darkolivegreen1","dodgerblue","gold1","orangered"),
bty="n", yaxt="n")
legend("topright", legend = c(paste("1° cuartil =", cuartiles[1]),
paste("2° cuartil =", cuartiles[2]),
paste("3° cuartil =", cuartiles[3]),
paste("4° cuartil =", cuartiles[4])),
col = c("darkolivegreen1","dodgerblue","gold1","orangered"), cex=0.7, pch = 19)Esta función permite extraer datos de las series económicas del BCRP automáticamente usando la técnica de web scraping. Es una alternativa al uso de APIS. Creemos que esta función es más intuitiva que el uso de APIS y por tanto de más fácil acceso. Esta función requiere el uso de 2 paquetes: rvest y dplyr. Pero no se preocupe estos paquetes se descargan al instalar nuestro paquete datametría.
La función tiene sólo 3 parámetros: periodo que es un elemento caracter que toma el periodo de la serie que se desea descargar. Puede ser: “diarias”, “mensuales”, “trimestrales” o “anuales”. El valor por defecto es “anuales”, es decir, extraerá series anuales. Pero usted puede modificarlo por una de las opciones. La elección dependerá del periodo en la que se encuentre disponible la serie en el BCRP. serie es un elemento caracter que toma el nombre de la serie. El valor por defecto es “PM04925AA” que corresponde a la demanda interna. Pero usted puede colocar el código de la serie que desee descargar, recuerde que esta serie viene asociado al argumento periodo. Y por último, nombre que es un elemento caracter que indica el nombre con el que saldrá la serie que se desea descargar. El valor por defecto es NULL. Lo que indica que asignará el nombre de la variable que esté disponible desde la página del BCRP.
Usted puede encontrar el periodo y la serie de los datos a extraer desde: https://estadisticas.bcrp.gob.pe/estadisticas/series/ayuda/metadatos
A continuación mostramos 2 ejemplos en donde se extrae la demanda interna y las reservas internaciones netas.
Por ejemplo, si deseamos tener la información de la demanda interna nosotros debemos de correr la siguiente sintaxis.
df<-bcrp(periodo="anuales", serie="PM04925AA", nombre="Demanda_Interna")En el argumento periodo le asignamos el valor de “anuales” lo que implica que se descargará datos que el BCRP nos informa anualmente. En el argumento serie asignamos el valor de “PM04925AA” que es el código de la serie de la demanda interna que se encuentra en periodos anuales. Por último, en el argumento nombre asignamos el valor de “Demanda_Interna”.
Como se puede observar los datos se están guardando en el objeto df.
Ahora apliquemos un head() a los datos que hemos descargado.
head(df)
# Fecha Demanda_Interna
# 1 1922 12688
# 2 1923 13103
# 3 1924 14566
# 4 1925 15162
# 5 1926 15776
# 6 1927 15898Como último ejemplo veamos la sintaxis para obtener las reservas internacionales netas.
df<-bcrp(periodo="mensuales", serie="PN00026MM", nombre="RIN")Viendo las 6 primeras filas.
head(df)
# Fecha RIN
# 1 Dic94 12464
# 2 Ene95 12530
# 3 Feb95 12759
# 4 Mar95 12823
# 5 Abr95 12681
# 6 May95 12720Esta función permite colocar texto en formato oración, como se podría hacer en un documento word. Es ideal para preprocesar texto y para la elaboración de gráficos y tablas.
Por ejemplo, si nosotros tenemos el siguiente vector caracter:
x<-c("oso","MACRO","HiTo","mas alla del bien y el mal","Dostoievski")
x
# [1] "oso" "MACRO"
# [3] "HiTo" "mas alla del bien y el mal"
# [5] "Dostoievski"Podemos pasarlo todo a formato oración.
oracion(x)
# [1] "Oso" "Macro"
# [3] "Hito" "Mas alla del bien y el mal"
# [5] "Dostoievski"Si se tienen textos más complejos con espacios extra, sería bueno usar primero la función limpiecito y luego la función oración.
Por el momento sólo se ha producido 7 funciones, pero en los siguientes días espero agregar más. Si tiene alguna sugerencia o comentario puede enviarnos un correo a: [email protected] o [email protected]
Muchas gracias.


