Sigue las instrucciones en cada paso del proceso. Es importante que sigas las instrucciones en orden, pues necesitarás el resultado del ejercicio anterior para cada ejercicio subsecuente.
Pon especial atención a los nombres de los tibbles y de las columnas, pues es posible que algo no funcione si no se nombran exactamente como se muestra.
Para cada ejercicio verás el resultado al cuál debes llegar.
El primer paso es cargar los paquetes necesarios con library():
library(openxlsx)
library(tidyverse)
Necesitarás importar los datos de Excel data/INNOVACIONES_COMPETENCIA_V2.xlsx. Puedes abrir primero el archivo en Excel para familiarizarte con él. Al importarlos, almacénalos en un objeto al cual llamarás dta.
## # A tibble: 12,752 x 17
## DESC PEPSICO.MANUFAC~ PEPSICO.BRAND PEPSICO.SUB.BRA~ PESO.VOL..UNITA~ CANAL
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 2 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 3 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 4 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 5 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 6 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 7 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 8 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 9 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## 10 GLOBA~ BIMBO WATZ POKLE 35 TOTA~
## # ... with 12,742 more rows, and 11 more variables: MES <chr>, AÑO <dbl>,
## # TDPS.(DISTRIBUCION.NUMERICA.VENDEN) <dbl>, SOM.VALUE <dbl>,
## # VENTAS.EN.VALOR.(in.000.PESOS) <dbl>, SOM.VOL <dbl>,
## # VENTAS.EN.UNIDADES.EQ.(in.000.KILOS) <dbl>, SOM.UNITS <dbl>,
## # VENTAS.EN.UNIDADES.(in.000) <dbl>, PPU <dbl>, PPK <dbl>
En este conjunto de datos tenemos información sobre ventas, distribución, share of market tanto unitarias, por volumen (kg) y por valor, de distintas variedades de botanas saladas. A nivel submarca, marca y fabricante.
Para seguir buenas prácticas de programación, los nombres deben contener únicamente minúsculas y guiones bajos, además de ser cortos pero informativos. Evita usar acentos y caracteres especiales, ñ sí está permitido. Procura ser consistente con la forma en la que nombras columnas, por ejemplo, si utilizas nombres en español procura que todos sean en español.
Sobreescribe tu tibble original (asignalo al tibble dta).
Para este ejercicio, utiliza los siguientes nombres:
## [1] "descripcion" "fabricante" "marca" "submarca" "peso_unit"
## [6] "canal" "mes" "año" "distribucion" "som_valor"
## [11] "ventas_valor" "som_volumen" "ventas_vol" "som_unit" "ventas_unit"
## [16] "ppu" "ppk"
## # A tibble: 12,752 x 17
## descripcion fabricante marca submarca peso_unit canal mes año
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ ENERO 2017
## 2 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ FEBR~ 2017
## 3 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ MARZO 2017
## 4 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ ABRIL 2017
## 5 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ MAYO 2017
## 6 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ JUNIO 2017
## 7 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ JULIO 2017
## 8 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ AGOS~ 2017
## 9 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ SEPT~ 2017
## 10 GLOBAL SALTY BIMBO EX~ BIMBO WATZ POKLE 35 TOTAL~ OCTU~ 2017
## # ... with 12,742 more rows, and 9 more variables: distribucion <dbl>,
## # som_valor <dbl>, ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>,
## # som_unit <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Siempre es útil darse una general de los datos con los que estamos tratando.
Utilizando distinct(), muestra los valores únicos de cada columna de tipo character. Recuerda que tienes que hacer una operación por cada columna, es decir, NO es muy útil hacer lo siguiente:
dta %>%
distinct(descripcion, fabricante, marca, submarca, canal)
## # A tibble: 356 x 5
## descripcion fabricante marca submarca canal
## <chr> <chr> <chr> <chr> <chr>
## 1 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ POKLE TOTAL MEXICO
## 2 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ POKLE CANAL TRADICIONA~
## 3 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ POKLE PROXIMIDAD Y MIN~
## 4 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ POKLE GRANDES CADENAS ~
## 5 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ TORNADO TOTAL MEXICO
## 6 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ TORNADO CANAL TRADICIONA~
## 7 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ TORNADO PROXIMIDAD Y MIN~
## 8 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ TORNADO GRANDES CADENAS ~
## 9 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ VOLTIO TOTAL MEXICO
## 10 GLOBAL SALTY BIMBO EXTRUDED / PE~ BIMBO WATZ VOLTIO CANAL TRADICIONA~
## # ... with 346 more rows
¿Qué columnas tienen datos faltantes?
¿Qué información nos brinda la columna descripcion que las columnas marcao submarca no?
Tenemos datos en formato mensual. Cuando esto suceda, el primer paso es encontrar las columnas que especifican las fechas y unirlas de manera que tengamos una sola columna, en formato date que proporcione la información temporal.
Es recomendable hacerlo en tres partes:
character utilizando paste() dentro de un mutate().## # A tibble: 12,752 x 18
## fecha descripcion fabricante marca submarca peso_unit canal mes año
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 01 EN~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ ENERO 2017
## 2 01 FE~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ FEBR~ 2017
## 3 01 MA~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ MARZO 2017
## 4 01 AB~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ ABRIL 2017
## 5 01 MA~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ MAYO 2017
## 6 01 JU~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ JUNIO 2017
## 7 01 JU~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ JULIO 2017
## 8 01 AG~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ AGOS~ 2017
## 9 01 SE~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ SEPT~ 2017
## 10 01 OC~ GLOBAL SALTY BI~ BIMBO WATZ POKLE 35 TOTA~ OCTU~ 2017
## # ... with 12,742 more rows, and 9 more variables: distribucion <dbl>,
## # som_valor <dbl>, ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>,
## # som_unit <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Aquí se muestra únicamente la columna fecha para que puedas ver mejor:
## # A tibble: 12,752 x 1
## fecha
## <chr>
## 1 01 ENERO 2017
## 2 01 FEBRERO 2017
## 3 01 MARZO 2017
## 4 01 ABRIL 2017
## 5 01 MAYO 2017
## 6 01 JUNIO 2017
## 7 01 JULIO 2017
## 8 01 AGOSTO 2017
## 9 01 SEPTIEMBRE 2017
## 10 01 OCTUBRE 2017
## # ... with 12,742 more rows
character a date, asegurándote de proveer el formato correcto por medio del argumento format de la funión as.Date().No olvides de asegurarte que R entienda que los nombres de los meses están en Español y con nombre completo, es decir, no abreviación.
Deberías ver el siguiente mensaje si usas Windows. Para Mac el mensaje es similar, pero no exactamente igual:
## [1] "LC_COLLATE=Spanish_Spain.1252;LC_CTYPE=Spanish_Spain.1252;LC_MONETARY=Spanish_Spain.1252;LC_NUMERIC=C;LC_TIME=Spanish_Spain.1252"
Y el resultado al cual llegarás:
## # A tibble: 12,752 x 18
## fecha descripcion fabricante marca submarca peso_unit canal mes año
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ ENERO 2017
## 2 2017-02-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ FEBR~ 2017
## 3 2017-03-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ MARZO 2017
## 4 2017-04-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ ABRIL 2017
## 5 2017-05-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ MAYO 2017
## 6 2017-06-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ JUNIO 2017
## 7 2017-07-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ JULIO 2017
## 8 2017-08-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ AGOS~ 2017
## 9 2017-09-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ SEPT~ 2017
## 10 2017-10-01 GLOBAL SALT~ BIMBO WATZ POKLE 35 TOTA~ OCTU~ 2017
## # ... with 12,742 more rows, and 9 more variables: distribucion <dbl>,
## # som_valor <dbl>, ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>,
## # som_unit <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Observa que debajo de fecha está el indicador de tipo de datos <date>.
mes y año, pues ya tenemos esa información en fecha.## # A tibble: 12,752 x 16
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 8 more variables: som_valor <dbl>,
## # ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>, som_unit <dbl>,
## # ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Sobreescribe el tibble dta para conservar todos estos cambios.
Observa que existen NAs en las columnas ppu y ppk. Es importante entender el por qué se están dando. Viendo la fuente de datos original, en Excel, entendemos que se deben a que las fórmulas de Excel con la cual se calculan estos valores dan errores y esos errores son interpretados por R como un NA.
Para calcular ppu o precio por unidad, la fórmula es \(\frac{ventas\_valor}{ventas\_unit}\), sin embargo, cuando ventas_unit == 0, sucede que la división no puede efectuarse (pues la división entre 0 está indefinida) y por eso marca el error.
Corrige las fórmulas para evitar que existan estos valores faltantes:
Utilizando ifelse(), define la fórmula de manera que si ventas_unit == 0, se ponga un 0 en esa columna, y en caso contrario, se haga la división \(\frac{ventas\_valor}{ventas\_unit}\)
Realiza el mismo procedimiento para ppk, es decir, precio por kilo. Recuerda que en nuestro tibble, los kgs están dados por ventas_vol.
## # A tibble: 12,752 x 16
## fecha ppu ppk ventas_valor ventas_vol ventas_unit descripcion
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 2017-01-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 2 2017-02-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 3 2017-03-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 4 2017-04-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 5 2017-05-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 6 2017-06-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 7 2017-07-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 8 2017-08-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 9 2017-09-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## 10 2017-10-01 0 0 0 0 0 GLOBAL SALTY BIMB~
## # ... with 12,742 more rows, and 9 more variables: fabricante <chr>,
## # marca <chr>, submarca <chr>, peso_unit <chr>, canal <chr>,
## # distribucion <dbl>, som_valor <dbl>, som_volumen <dbl>, som_unit <dbl>
*Se reordenaron las columnas para que se vean primero las relevantes a este ejercicio. Es sólo para propósitos de visualización, no es necesario que estén en este orden.
Otra columna en la que tenemos datos faltantes es submarca.
Utiliza filter() para ver los renglones donde submarca es NA:
## # A tibble: 3,476 x 16
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 47
## 2 2017-02-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 45
## 3 2017-03-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 46
## 4 2017-04-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 47
## 5 2017-05-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 46
## 6 2017-06-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 44
## 7 2017-07-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 43
## 8 2017-08-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 46
## 9 2017-09-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 46
## 10 2017-10-01 BRAND PEPSICO TOST~ <NA> <NA> TOTA~ 44
## # ... with 3,466 more rows, and 8 more variables: som_valor <dbl>,
## # ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>, som_unit <dbl>,
## # ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Posteriormente, con los renglones ya filtrados utiliza distinct() para descripcion, fabricante y marca. Cada una por separado.
submarca es NA?Con ayuda de ifelse(), modifica la variable submarca de manera que se reemplacen los valores faltantes con "total_marca".
Sobreescribe dta con este último cambio
## # A tibble: 12,752 x 16
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 8 more variables: som_valor <dbl>,
## # ventas_valor <dbl>, som_volumen <dbl>, ventas_vol <dbl>, som_unit <dbl>,
## # ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Veamos los valores unicos de submarca después de estos cambios
dta %>%
distinct(submarca) %>%
print(n = 31)
## # A tibble: 31 x 1
## submarca
## <chr>
## 1 POKLE
## 2 TORNADO
## 3 VOLTIO
## 4 ZOMBIE
## 5 FAJITAS
## 6 ARELOS
## 7 CRUJITOS
## 8 CHURRUMAIS
## 9 DORITOS DINAMITA
## 10 total_marca
## 11 CHEESE SHOCK
## 12 FUEGO
## 13 CHURRITOS
## 14 XL
## 15 POP MANTEQUILLA
## 16 CHILE PIQUIN
## 17 ELOTE Y LIMON
## 18 QUESO
## 19 SALSA NEGRA
## 20 LIMBO
## 21 SHOCK
## 22 TA'KATRIN
## 23 VOLCANO
## 24 JALAPENO
## 25 REGULAR
## 26 FLAMIN' HOT
## 27 FLAMAS
## 28 MEGA CRUNCH COCTELERAS
## 29 ULTRA FLAMIN' HOT
## 30 OTR. SUBMARCAS
## 31 DINAMITA CHILE Y LIMON
Observa que ya no existen NAs en esa columna.
Las columnas que contienen som, abreviación de share of market, serán eliminadas como parte de los primeros pasos, pues siempre es mejor calcularlas desde R, en caso de ser necesarias más adelante.
Utiliza las funciones auxiliares contains() o starts_with() dentro de un select() para eliminar dichas columnas.
Sobreescribe el tibble dta para conservar tus cambios:
## # A tibble: 12,752 x 13
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 5 more variables: ventas_valor <dbl>,
## # ventas_vol <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Nota que los datos vienen detallados hasta cierto nivel de granularidad. En este caso la estructura de niveles es como sigue:
descripcion y peso_unit.Por lo tanto, los datos están detallados hasta nivel presentación.
Por ahorita, nos interesa eliminar un nivel de granularidad, calcular los totales de las ventas a nivel submarca.
fecha, canal, fabricante, marca, submarca. Utiliza group_by() para este caso.## # A tibble: 12,752 x 13
## # Groups: fecha, canal, fabricante, marca, submarca [9,492]
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 GLOBAL SAL~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 5 more variables: ventas_valor <dbl>,
## # ventas_vol <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
summarise() para calcular la suma de cada columna de ventas. Asegúrate de nombrar de la misma manera cada columna resumida, i.e, ventas_valor = sum(ventas_valor), etc.Cuida también que en tu resultado no conserves ningún grupo.
Almacena el resultado en dta_submarca
## # A tibble: 9,492 x 8
## fecha canal fabricante marca submarca ventas_valor ventas_vol
## <date> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADICI~ BIMBO ARELOS ARELOS 0 0
## 2 2017-01-01 CANAL TRADICI~ BIMBO ARELOS total_m~ 0 0
## 3 2017-01-01 CANAL TRADICI~ BIMBO BIG MIX total_m~ 55616. 445.
## 4 2017-01-01 CANAL TRADICI~ BIMBO TAKIS FAJITAS 0 0
## 5 2017-01-01 CANAL TRADICI~ BIMBO TAKIS total_m~ 207267. 1509.
## 6 2017-01-01 CANAL TRADICI~ BIMBO TAKIS ZOMBIE 0 0
## 7 2017-01-01 CANAL TRADICI~ BIMBO TOSTAC~ total_m~ 19462. 155.
## 8 2017-01-01 CANAL TRADICI~ BIMBO VALENT~ total_m~ 4307. 36.2
## 9 2017-01-01 CANAL TRADICI~ BIMBO WAPAS total_m~ 0 0
## 10 2017-01-01 CANAL TRADICI~ BIMBO WATZ POKLE 0 0
## # ... with 9,482 more rows, and 1 more variable: ventas_unit <dbl>
Nota que se eliminaron las columnas ppk y ppu. Esto es correcto pues dichos valores no deben resumirse con la función de suma sum, más bien deben calcularse con las ventas ya resumidas. Las calcularemos más adelante.
Por lo general existen múltiples maneras de resolver un problema, siendo preferibles alternativas en las que se escriba menos código.
Una forma alternativa de realizar la operación anterior es:
dta_submarca <- dta %>%
group_by(fecha, canal, fabricante, marca, submarca) %>%
summarise(across(.cols = c(ventas_valor, ventas_vol, ventas_unit), .fns = sum)) %>%
ungroup()
dta_submarca
## # A tibble: 9,492 x 8
## fecha canal fabricante marca submarca ventas_valor ventas_vol
## <date> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADICI~ BIMBO ARELOS ARELOS 0 0
## 2 2017-01-01 CANAL TRADICI~ BIMBO ARELOS total_m~ 0 0
## 3 2017-01-01 CANAL TRADICI~ BIMBO BIG MIX total_m~ 55616. 445.
## 4 2017-01-01 CANAL TRADICI~ BIMBO TAKIS FAJITAS 0 0
## 5 2017-01-01 CANAL TRADICI~ BIMBO TAKIS total_m~ 207267. 1509.
## 6 2017-01-01 CANAL TRADICI~ BIMBO TAKIS ZOMBIE 0 0
## 7 2017-01-01 CANAL TRADICI~ BIMBO TOSTAC~ total_m~ 19462. 155.
## 8 2017-01-01 CANAL TRADICI~ BIMBO VALENT~ total_m~ 4307. 36.2
## 9 2017-01-01 CANAL TRADICI~ BIMBO WAPAS total_m~ 0 0
## 10 2017-01-01 CANAL TRADICI~ BIMBO WATZ POKLE 0 0
## # ... with 9,482 more rows, and 1 more variable: ventas_unit <dbl>
Notarás una función auxiliar dentro de summarise():
across(): Es una función que puede usarse dentro de mutate() y summarise() y es útil para indicar que una operación se realizará a lo largo de varias columnas. Tiene 2 argumentos principales: .cols y .fns. El primero sirve para indicar las columnas sobre las cuales se operará, el segundo para especificar la(s) función(es) que se les aplicará.Para el argumento .cols, se nombra cada columna. Para el argumento .fns, se específica la función con la cuál se resumirá, en este caso sum.
La operación anterior puede escribirse de una forma aún más compacta:
dta_submarca <- dta %>%
group_by(fecha, canal, fabricante, marca, submarca) %>%
summarise(across(.cols = contains("ventas"), .fns = sum),
.groups = "drop")
dta_submarca
## # A tibble: 9,492 x 8
## fecha canal fabricante marca submarca ventas_valor ventas_vol
## <date> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADICI~ BIMBO ARELOS ARELOS 0 0
## 2 2017-01-01 CANAL TRADICI~ BIMBO ARELOS total_m~ 0 0
## 3 2017-01-01 CANAL TRADICI~ BIMBO BIG MIX total_m~ 55616. 445.
## 4 2017-01-01 CANAL TRADICI~ BIMBO TAKIS FAJITAS 0 0
## 5 2017-01-01 CANAL TRADICI~ BIMBO TAKIS total_m~ 207267. 1509.
## 6 2017-01-01 CANAL TRADICI~ BIMBO TAKIS ZOMBIE 0 0
## 7 2017-01-01 CANAL TRADICI~ BIMBO TOSTAC~ total_m~ 19462. 155.
## 8 2017-01-01 CANAL TRADICI~ BIMBO VALENT~ total_m~ 4307. 36.2
## 9 2017-01-01 CANAL TRADICI~ BIMBO WAPAS total_m~ 0 0
## 10 2017-01-01 CANAL TRADICI~ BIMBO WATZ POKLE 0 0
## # ... with 9,482 more rows, and 1 more variable: ventas_unit <dbl>
Observa el uso de la función contains(). Es útil para especificar varias columnas cuyos nombres comparten un pedazo de texto. En nuestro ejemplo es "ventas". Se utiliza dentro de across().
Nota también el uso del argumento .groups dentro del summarise(). Es equivalente a utilizar %>% ungroup() justo después del summarise(), y sirve para asegurarte que los grupos que creaste con group_by() ya no se conserven después de resumir los datos.
Siguiendo la idea del ejercicio anterior y utilizando la forma de código más compacta, calcula ahora:
dta_marca:## # A tibble: 3,772 x 7
## fecha canal fabricante marca ventas_valor ventas_vol ventas_unit
## <date> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADI~ BIMBO ARELOS 0 0 0
## 2 2017-01-01 CANAL TRADI~ BIMBO BIG M~ 55616. 445. 5390.
## 3 2017-01-01 CANAL TRADI~ BIMBO TAKIS 207267. 1509. 24343.
## 4 2017-01-01 CANAL TRADI~ BIMBO TOSTA~ 19462. 155. 2372.
## 5 2017-01-01 CANAL TRADI~ BIMBO VALEN~ 4307. 36.2 216.
## 6 2017-01-01 CANAL TRADI~ BIMBO WAPAS 0 0 0
## 7 2017-01-01 CANAL TRADI~ BIMBO WATZ 0 0 0
## 8 2017-01-01 CANAL TRADI~ PEPSICO CRUJI~ 96898. 538. 11894.
## 9 2017-01-01 CANAL TRADI~ PEPSICO CHEET~ 424027. 3207. 65326.
## 10 2017-01-01 CANAL TRADI~ PEPSICO CHURR~ 74634. 719. 13227.
## # ... with 3,762 more rows
dta_fabricante:## # A tibble: 416 x 6
## fecha canal fabricante ventas_valor ventas_vol ventas_unit
## <date> <chr> <chr> <dbl> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADICIONAL ~ BIMBO 286652. 2145. 32320.
## 2 2017-01-01 CANAL TRADICIONAL ~ PEPSICO 2229881. 13860. 248827.
## 3 2017-01-01 GRANDES CADENAS DE~ BIMBO 8514. 71.3 657.
## 4 2017-01-01 GRANDES CADENAS DE~ PEPSICO 321397. 2290. 15475.
## 5 2017-01-01 PROXIMIDAD Y MINIS~ BIMBO 47500. 331. 3948.
## 6 2017-01-01 PROXIMIDAD Y MINIS~ PEPSICO 585687. 3225. 35547.
## 7 2017-01-01 TOTAL MEXICO BIMBO 347082. 2580. 37421.
## 8 2017-01-01 TOTAL MEXICO PEPSICO 3184156. 19663. 305018.
## 9 2017-02-01 CANAL TRADICIONAL ~ BIMBO 269141. 1982. 29859.
## 10 2017-02-01 CANAL TRADICIONAL ~ PEPSICO 2073636. 12773. 231014
## # ... with 406 more rows
Para cada tibble de dta_submarca, dta_marca y dta_fabricante calcula las variables ppk y ppu, como se especificó en la sección 5.1
## # A tibble: 416 x 8
## fecha canal fabricante ventas_valor ventas_vol ventas_unit ppu ppk
## <date> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2017-01-01 CANAL ~ BIMBO 286652. 2145. 32320. 8.87 134.
## 2 2017-01-01 CANAL ~ PEPSICO 2229881. 13860. 248827. 8.96 161.
## 3 2017-01-01 GRANDE~ BIMBO 8514. 71.3 657. 13.0 119.
## 4 2017-01-01 GRANDE~ PEPSICO 321397. 2290. 15475. 20.8 140.
## 5 2017-01-01 PROXIM~ BIMBO 47500. 331. 3948. 12.0 144.
## 6 2017-01-01 PROXIM~ PEPSICO 585687. 3225. 35547. 16.5 182.
## 7 2017-01-01 TOTAL ~ BIMBO 347082. 2580. 37421. 9.28 135.
## 8 2017-01-01 TOTAL ~ PEPSICO 3184156. 19663. 305018. 10.4 162.
## 9 2017-02-01 CANAL ~ BIMBO 269141. 1982. 29859. 9.01 136.
## 10 2017-02-01 CANAL ~ PEPSICO 2073636. 12773. 231014 8.98 162.
## # ... with 406 more rows
## # A tibble: 3,772 x 9
## fecha canal fabricante marca ventas_valor ventas_vol ventas_unit ppu
## <date> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2017-01-01 CANAL ~ BIMBO AREL~ 0 0 0 0
## 2 2017-01-01 CANAL ~ BIMBO BIG ~ 55616. 445. 5390. 10.3
## 3 2017-01-01 CANAL ~ BIMBO TAKIS 207267. 1509. 24343. 8.51
## 4 2017-01-01 CANAL ~ BIMBO TOST~ 19462. 155. 2372. 8.21
## 5 2017-01-01 CANAL ~ BIMBO VALE~ 4307. 36.2 216. 20.0
## 6 2017-01-01 CANAL ~ BIMBO WAPAS 0 0 0 0
## 7 2017-01-01 CANAL ~ BIMBO WATZ 0 0 0 0
## 8 2017-01-01 CANAL ~ PEPSICO CRUJ~ 96898. 538. 11894. 8.15
## 9 2017-01-01 CANAL ~ PEPSICO CHEE~ 424027. 3207. 65326. 6.49
## 10 2017-01-01 CANAL ~ PEPSICO CHUR~ 74634. 719. 13227. 5.64
## # ... with 3,762 more rows, and 1 more variable: ppk <dbl>
## # A tibble: 9,492 x 10
## fecha canal fabricante marca submarca ventas_valor ventas_vol
## <date> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 2017-01-01 CANAL TRADICI~ BIMBO ARELOS ARELOS 0 0
## 2 2017-01-01 CANAL TRADICI~ BIMBO ARELOS total_m~ 0 0
## 3 2017-01-01 CANAL TRADICI~ BIMBO BIG MIX total_m~ 55616. 445.
## 4 2017-01-01 CANAL TRADICI~ BIMBO TAKIS FAJITAS 0 0
## 5 2017-01-01 CANAL TRADICI~ BIMBO TAKIS total_m~ 207267. 1509.
## 6 2017-01-01 CANAL TRADICI~ BIMBO TAKIS ZOMBIE 0 0
## 7 2017-01-01 CANAL TRADICI~ BIMBO TOSTAC~ total_m~ 19462. 155.
## 8 2017-01-01 CANAL TRADICI~ BIMBO VALENT~ total_m~ 4307. 36.2
## 9 2017-01-01 CANAL TRADICI~ BIMBO WAPAS total_m~ 0 0
## 10 2017-01-01 CANAL TRADICI~ BIMBO WATZ POKLE 0 0
## # ... with 9,482 more rows, and 3 more variables: ventas_unit <dbl>, ppu <dbl>,
## # ppk <dbl>
Como ya vimos anteriormente, la columna descripcion contiene mucha información. Algunas partes, sin embargo, son redundantes ya que la misma información está contenida en la columna submarca, marca.
Corre lo siguiente en tu consola para ver todos los valores únicos de la columna en cuestión, y poder decidir qué funciones aplicar
dta %>%
distinct(descripcion) %>%
print(n = 99)
Observa que para muchos renglones, se tiene el string “GLOBAL SALTY”, lo cuál no provee información útil
Utilizando alguna de las funciones para operar con strings que se explican en las notas, sobreescribe la columna descripcion quitando el string "GLOBAL SALTY".
Almacena los cambios en dta.
Llegarás a lo siguiente:
## # A tibble: 12,752 x 13
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 BIMBO EXTR~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 5 more variables: ventas_valor <dbl>,
## # ventas_vol <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Viendo los valores únicos:
dta %>%
distinct(descripcion) %>%
print(n = 30)
## # A tibble: 72 x 1
## descripcion
## <chr>
## 1 BIMBO EXTRUDED / PELLETS BARCEL BARCEL WATZ POKLE 0 a 70 35
## 2 BIMBO EXTRUDED / PELLETS BARCEL BARCEL WATZ TORNADO 0 a 47 35
## 3 BIMBO EXTRUDED / PELLETS BARCEL BARCEL WATZ VOLTIO 0 a 70 35
## 4 BIMBO TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 56
## 5 BIMBO TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 62
## 6 BIMBO TORTILLA CHIPS TAKIS TAKIS FAJITAS 0 a 85 62
## 7 BIMBO EXTRUDED / PELLETS ARELOS 0 a 70 25
## 8 PEPSICO EXTRUDED / PELLETS CRUJITOS 0 a 47 40
## 9 PEPSICO EXTRUDED / PELLETS CRUJITOS 0 a 47 43
## 10 PEPSICO EXTRUDED / PELLETS CRUJITOS 0 a 47 46
## 11 PEPSICO CORN CHIPS CHURRUMAIS 0 a 80 62
## 12 PEPSICO TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 65
## 13 PEPSICO TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 72
## 14 PEPSICO TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 80
## 15 BRAND
## 16 EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ CHEESE SHOCK 0 a 70 55
## 17 BIMBO EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ FUEGO 0 a 70 55
## 18 BIMBO CORN CHIPS CHURRITOS STIX FUEGO 0 a 80 79
## 19 BIMBO CORN CHIPS CHURRITOS STIX CHURRITOS 0 a 80 79
## 20 BIMBO SNACK MIX BIG MIX XL 0 a 70 65
## 21 BIMBO RTE POPCORN SALTED RTE POPCORN POP POP MANTEQUILLA 0 a 80 35
## 22 BIMBO POTATO CHIP CHIPS CHILE PIQUIN 0 a 70 46
## 23 BIMBO POTATO CHIP WAPAS ELOTE Y LIMON 0 a 70 50
## 24 BIMBO POTATO CHIP WAPAS FUEGO 0 a 70 42
## 25 BIMBO POTATO CHIP WAPAS FUEGO 71 a 140 75
## 26 BIMBO POTATO CHIP WAPAS QUESO 0 a 70 42
## 27 BIMBO POTATO CHIP WAPAS QUESO 0 a 70 50
## 28 BIMBO POTATO CHIP WAPAS QUESO 141 A 250 200
## 29 BIMBO POTATO CHIP WAPAS QUESO 71 a 140 75
## 30 BIMBO POTATO CHIP WAPAS SALSA NEGRA 0 a 70 42
## # ... with 42 more rows
En la columna descripción tambien tenemos al fabricante (BIMBO o PEPSICO),sin embargo, está información ya la tenemos en la columna fabricante por lo que podemos eliminar esa parte de texto.
Utilizando alguna de las funciones para strings, modifica la columna descripcion de manera que se elimine la parte de texto referente al fabricante. En este caso, sólo es "PEPSICO" o "BIMBO".
Recuerda que puedes utilizar el operador | que representa la operación lógica “o”.
Sobreescribe tu tibble dta para conservar los cambios.d
## # A tibble: 12,752 x 13
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 5 more variables: ventas_valor <dbl>,
## # ventas_vol <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Viendo los valores únicos:
dta %>%
distinct(descripcion) %>%
print(n = 30)
## # A tibble: 72 x 1
## descripcion
## <chr>
## 1 EXTRUDED / PELLETS BARCEL BARCEL WATZ POKLE 0 a 70 35
## 2 EXTRUDED / PELLETS BARCEL BARCEL WATZ TORNADO 0 a 47 35
## 3 EXTRUDED / PELLETS BARCEL BARCEL WATZ VOLTIO 0 a 70 35
## 4 TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 56
## 5 TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 62
## 6 TORTILLA CHIPS TAKIS TAKIS FAJITAS 0 a 85 62
## 7 EXTRUDED / PELLETS ARELOS 0 a 70 25
## 8 EXTRUDED / PELLETS CRUJITOS 0 a 47 40
## 9 EXTRUDED / PELLETS CRUJITOS 0 a 47 43
## 10 EXTRUDED / PELLETS CRUJITOS 0 a 47 46
## 11 CORN CHIPS CHURRUMAIS 0 a 80 62
## 12 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 65
## 13 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 72
## 14 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 80
## 15 BRAND
## 16 EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ CHEESE SHOCK 0 a 70 55
## 17 EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ FUEGO 0 a 70 55
## 18 CORN CHIPS CHURRITOS STIX FUEGO 0 a 80 79
## 19 CORN CHIPS CHURRITOS STIX CHURRITOS 0 a 80 79
## 20 SNACK MIX BIG MIX XL 0 a 70 65
## 21 RTE POPCORN SALTED RTE POPCORN POP POP MANTEQUILLA 0 a 80 35
## 22 POTATO CHIP CHIPS CHILE PIQUIN 0 a 70 46
## 23 POTATO CHIP WAPAS ELOTE Y LIMON 0 a 70 50
## 24 POTATO CHIP WAPAS FUEGO 0 a 70 42
## 25 POTATO CHIP WAPAS FUEGO 71 a 140 75
## 26 POTATO CHIP WAPAS QUESO 0 a 70 42
## 27 POTATO CHIP WAPAS QUESO 0 a 70 50
## 28 POTATO CHIP WAPAS QUESO 141 A 250 200
## 29 POTATO CHIP WAPAS QUESO 71 a 140 75
## 30 POTATO CHIP WAPAS SALSA NEGRA 0 a 70 42
## # ... with 42 more rows
Al final de cada valor de descripcion (de casi todos), viene el número de gramos de la presentación, sin embargo, esa información ya está en la columna peso_unit.
Modifica la columna descripcion quita esa parte de los datos, utilizando str_remove() y un pattern construido con REGEX.
Sobreescribe tu tibble dta para conservar los cambios.
## # A tibble: 12,752 x 13
## fecha descripcion fabricante marca submarca peso_unit canal distribucion
## <date> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 2017-01-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 2 2017-02-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 3 2017-03-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 4 2017-04-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 5 2017-05-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 6 2017-06-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 7 2017-07-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 8 2017-08-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 9 2017-09-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## 10 2017-10-01 EXTRUDED /~ BIMBO WATZ POKLE 35 TOTA~ 0
## # ... with 12,742 more rows, and 5 more variables: ventas_valor <dbl>,
## # ventas_vol <dbl>, ventas_unit <dbl>, ppu <dbl>, ppk <dbl>
Pista: Recuerda que para construir un pattern necesitas especifcar cada parte del texto. En este caso necesitas lo siguiente:
Iniciar con un espacio, para quitar los digitos del final con todo y el espacio.
Especificar que se tienen uno o dos digitos. Para eso usa "\\d" para indicar dígito y "*" para indicar que pueden ser varios.
Indicar que debe ser la última parte del texto, pues existen otros dígitos que no queremos eliminar. Para esto, utiliza el operador "$".
Juntando estas partes en orden, puedes tener un pattern que hace justo lo que necesitas.
Viendo los valores únicos:
dta %>%
distinct(descripcion) %>%
print(n = 30)
## # A tibble: 52 x 1
## descripcion
## <chr>
## 1 EXTRUDED / PELLETS BARCEL BARCEL WATZ POKLE 0 a 70
## 2 EXTRUDED / PELLETS BARCEL BARCEL WATZ TORNADO 0 a 47
## 3 EXTRUDED / PELLETS BARCEL BARCEL WATZ VOLTIO 0 a 70
## 4 TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85
## 5 TORTILLA CHIPS TAKIS TAKIS FAJITAS 0 a 85
## 6 EXTRUDED / PELLETS ARELOS 0 a 70
## 7 EXTRUDED / PELLETS CRUJITOS 0 a 47
## 8 CORN CHIPS CHURRUMAIS 0 a 80
## 9 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85
## 10 BRAND
## 11 EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ CHEESE SHOCK 0 a 70
## 12 EXTRUDED / PELLETS CHEESE / CORN PUFFS / KURKURE WATZ FUEGO 0 a 70
## 13 CORN CHIPS CHURRITOS STIX FUEGO 0 a 80
## 14 CORN CHIPS CHURRITOS STIX CHURRITOS 0 a 80
## 15 SNACK MIX BIG MIX XL 0 a 70
## 16 RTE POPCORN SALTED RTE POPCORN POP POP MANTEQUILLA 0 a 80
## 17 POTATO CHIP CHIPS CHILE PIQUIN 0 a 70
## 18 POTATO CHIP WAPAS ELOTE Y LIMON 0 a 70
## 19 POTATO CHIP WAPAS FUEGO 0 a 70
## 20 POTATO CHIP WAPAS FUEGO 71 a 140
## 21 POTATO CHIP WAPAS QUESO 0 a 70
## 22 POTATO CHIP WAPAS QUESO 141 A 250
## 23 POTATO CHIP WAPAS QUESO 71 a 140
## 24 POTATO CHIP WAPAS SALSA NEGRA 0 a 70
## 25 EXTRUDED / PELLETS OTHER EXTRUDED / PELLETS VALENTONES FUEGO 48 a 125
## 26 TORTILLA CHIPS FLAVOURED TORTILLA CHIPS TAKIS LIMBO 0 a 85
## 27 TORTILLA CHIPS FLAVOURED TORTILLA CHIPS TAKIS SHOCK 0 a 85
## 28 SALTY TORTILLA CHIPS FLAVOURED TORTILLA CHIPS TAKIS TA'KATRIN 0 a 85
## 29 SALTY TORTILLA CHIPS FLAVOURED TORTILLA CHIPS TAKIS VOLCANO 0 a 85
## 30 SALTY TORTILLA CHIPS FLAVOURED TORTILLA CHIPS TOSTACHOS FUEGO 0 a 85
## # ... with 22 more rows
Al final de los valores de descripcion (de casi todos) tenemos un rango de gramos, que nos ayudará para agrupar las bolsitas por tamaño, sin necesidad de dar su peso unitario exacto.
Con ayuda de str_extract(), crea una nueva columna que se llame rango_gramaje que contenga esta información. Necesitarás crear un pattern que te permita extraer justo los caracteres necesarios.
Sobreescribe dta para conservar los cambios.
Visualizando el resultado con ayuda de distinct():
dta %>%
distinct(descripcion, rango_gramaje)
## # A tibble: 52 x 2
## descripcion rango_gramaje
## <chr> <chr>
## 1 EXTRUDED / PELLETS BARCEL BARCEL WATZ POKLE 0 a 70 0 a 70
## 2 EXTRUDED / PELLETS BARCEL BARCEL WATZ TORNADO 0 a 47 0 a 47
## 3 EXTRUDED / PELLETS BARCEL BARCEL WATZ VOLTIO 0 a 70 0 a 70
## 4 TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 0 a 85
## 5 TORTILLA CHIPS TAKIS TAKIS FAJITAS 0 a 85 0 a 85
## 6 EXTRUDED / PELLETS ARELOS 0 a 70 0 a 70
## 7 EXTRUDED / PELLETS CRUJITOS 0 a 47 0 a 47
## 8 CORN CHIPS CHURRUMAIS 0 a 80 0 a 80
## 9 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 0 a 85
## 10 BRAND <NA>
## # ... with 42 more rows
Pista: La construcción del pattern es análoga a la del ejercicio anterior. Todos los operadores necesarios ya los conoces:
Otro elemento importante dentro de la columna descripcion es el tipo de botana.
Puede ser uno de los siguientes valores:
EXTRUDED,CORN CHIPS,TORTILLA CHIPS,RTE POPCORN,POTATO CHIP,SNACK MIX
Crea una nueva columna, llamada tipo_botana, con la ayuda de str_extract(), que extraiga de la columna descripcion alguno de todos los valores posibles.
Recuerda el uso del operador |.
Sobreescribe dta para conservar los cambios.
Visualizando el resultado con ayuda de distinct():
## # A tibble: 52 x 2
## descripcion tipo_botana
## <chr> <chr>
## 1 EXTRUDED / PELLETS BARCEL BARCEL WATZ POKLE 0 a 70 EXTRUDED
## 2 EXTRUDED / PELLETS BARCEL BARCEL WATZ TORNADO 0 a 47 EXTRUDED
## 3 EXTRUDED / PELLETS BARCEL BARCEL WATZ VOLTIO 0 a 70 EXTRUDED
## 4 TORTILLA CHIPS TAKIS TAKIS ZOMBIE 0 a 85 TORTILLA CHIPS
## 5 TORTILLA CHIPS TAKIS TAKIS FAJITAS 0 a 85 TORTILLA CHIPS
## 6 EXTRUDED / PELLETS ARELOS 0 a 70 EXTRUDED
## 7 EXTRUDED / PELLETS CRUJITOS 0 a 47 EXTRUDED
## 8 CORN CHIPS CHURRUMAIS 0 a 80 CORN CHIPS
## 9 TORTILLA CHIPS DORITOS DORITOS DINAMITA 0 a 85 TORTILLA CHIPS
## 10 BRAND <NA>
## # ... with 42 more rows