Monitoreo mensual del empleo de plataformas digitales

Autor/a

Nicolás Ratto

Fecha de publicación

30 de junio de 2026

El presente documento consiste en un monitoreo mensual del empleo en el sector de las plataformas digitales de Chile, en base a la Encuesta Nacional de Empleo del Instituto Nacional de Estadísticas (INE). Esto, para el proyecto Hacia una regulación laboral efectiva para los trabajadores de plataformas digitales, financiado por la Friedrich-Ebert-Stiftung (FES) Chile.

Todos los datos son públicos y fueron descargados desde el sitio web del INE. La última actualización de los datos corresponde al trimestre Marzo - Abril - Mayo de 2026 (MAM 2026).

Cargar paquetes

Ver código
library(haven)
library(sjlabelled)
library(ggplot2)
library(dplyr)
library(lubridate)
library(magrittr)
library(scales)
library(knitr)
library(arrow)

if (!dir.exists("output")) {
  dir.create("output")
}

if (!dir.exists("output/graficos")) {
  dir.create("output/graficos")
}

if (!dir.exists("output/tablas")) {
  dir.create("output/tablas")
}

Carga bases de datos

Ver código
ds <- open_dataset("../../../../PROSPECTIVA SpA/minuta ENE/ene_empleo/output/data")

pd <- ds %>% 
  filter(ano_trimestre>=2020) %>% 
  select(periodo, fact_cal, plataformas_digitales) %>%
  filter(plataformas_digitales == 1) %>%
  group_by(periodo) %>%
  summarise(plataformas = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

ocupados <- ds %>% 
    filter(periodo>="2020-02-01") %>% 
  filter(activ == 1) %>%
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

pd <- merge(pd,ocupados,by="periodo")

Plataformas digitales (todas las reportadas)

Ver código
# Detalle

aux <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(periodo) %>%  
  summarise(n=n())%>% 
  collect()

nombres_plataformas <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

nombres_plataformas<-nombres_plataformas %>% filter(pd_especifique!="")

head(nombres_plataformas,10) %>% kable(caption = "Principales empresas de plataformas reportadas (promedio ocupados mensuales)", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas (promedio ocupados mensuales)
Plataformas Ocupados mensualizado
INSTAGRAM 54.504
FACEBOOK 38.113
WHATSAPP 36.730
UBER 30.774
FACEBOOK MARKETPLACE 7.015
FACEBOOK INSTAGRAM 6.881
UBER EATS 4.727
PEDIDOS YA 3.861
INSTAGRAM FACEBOOK 3.573
CORNERSHOP 3.510
Ver código
ggplot(pd, aes(x = periodo, y = plataformas)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  scale_y_continuous(
  breaks = seq(0, max(pd$plataformas, na.rm = TRUE) + 50000, by = 50000),
  labels = label_number(big.mark = ".", decimal.mark = ",")
) + 
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Todas las plataformas, excluyendo las redes sociales

Ver código
## quitar plataformas de venta online y redes sociales
nombres_plataformas_para_filtrar <- subset(nombres_plataformas,
                                           !(pd_especifique %in% 
                                               c("INSTAGRAM",
                                                 "FACEBOOK",
                                                 "WHATSAPP",
                                                 "FACEBOOK INSTAGRAM",
                                                 "FACEBOOK MARKETPLACE",
                                                 "INSTAGRAM FACEBOOK",
                                                 "FACEBOOK WHATSAPP",
                                                 "WHATSAPP FACEBOOK",
                                                 "WHATSAPP FACEBOOK INSTAGRAM",
                                                 "INSTAGRAM FACEBOOK WHATSAPP",
                                                 "INSTAGRAM WHATSAPP",
                                                 "MARKETPLACE",
                                                 "FACEBOOK INSTAGRAM WHATSAPP",
                                                 "WHATSAPP INSTAGRAM",
                                                 "WHATSAPP INSTAGRAM FACEBOOK",
                                                 "FACEBOOK MARKETPLACE INSTAGRAM",
                                                 "TIKTOK",
                                                 "FACEBOOK WHATSAPP INSTAGRAM",
                                                 "INSTAGRAM TIKTOK",
                                                 "FACEBOOK INSTAGRAM TIKTOK",
                                                 "MARKETPLACE FACEBOOK",
                                                 "MARKETPLACE INSTAGRAM",
                                                 "INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MARKETPLACE",
                                                 "TELEGRAM",
                                                 "FACEBOOK MARKETPLACE WHATSAPP",
                                                "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP",
                                                 "INSTAGRAM FACEBOOK TIKTOK",
                                                "WATTASPP INSTAGRAM",
                                            "FACEBOOK WHATSAPP INSTAGRAM TIKTOK",
                                                "TIKTOK FACEBOOK INSTAGRAM WHATSAPP",
                                                "FACEBOOK TIKTOK INSTAGRAM",
                                                "FACEBOOK INSTAGRAM MARKETPLACE",
                                                 "FACEBOOK TIKTOK",
                                            "WHATSAPP FACEBOOK YAPO",
                                            "INSTAGRAM FACEBOOK WHATSAPP TIKTOK",
                                                "WHATSAPP TIKTOK FACEBOOK",
                                                 "TWITTER INSTAGRAM",
                                            "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MUNICIPALIDAD DE CONDES",
                                                 "INSTAGRAMWSP")))


pd2 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd2 <- pd2 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% 
  kable(caption = "Principales empresas de plataformas reportadas, sin redes sociales", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, sin redes sociales
Plataformas Ocupados mensualizado
UBER 30.774
UBER EATS 4.727
PEDIDOS YA 3.861
CORNERSHOP 3.510
MERCADOLIBRE 2.932
DIDI 2.317
RAPPI 2.048
INDRIVER 1.785
CABIFY 729
YOUTUBE 468
Ver código
graf_redes <- ggplot(pd2, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales, sin redes sociales (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Plataformas georreferenciadas (Ley 21.431)

Ver código
## quitar plataformas de arriendo dptos y streaming
nombres_plataformas_para_filtrar <- subset(nombres_plataformas_para_filtrar,
                                           !(pd_especifique %in% 
                                               c("YOUTUBE",
                                                 "AIRBNB",
                                                 "BOOKING",
                                                 "WHATSAPP YOUTUBE",
                                                 "TWITCH")))

pd_ley21431 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd_ley21431 <- pd_ley21431 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, Ley 21431
Plataformas Ocupados mensualizado
UBER 30.774
UBER EATS 4.727
PEDIDOS YA 3.861
CORNERSHOP 3.510
MERCADOLIBRE 2.932
DIDI 2.317
RAPPI 2.048
INDRIVER 1.785
CABIFY 729
AMIDA 356
Ver código
ggplot(pd_ley21431, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)
Ver código
## gráfica conjunta

pd <- pd %>% select(periodo,plataformas) %>% mutate(tipo="todas") %>% 
  rename(ocupados=plataformas)
pd_ley21431 <- pd_ley21431 %>% select(periodo,ocupados) %>% mutate(tipo="ley21431")

pd_ley21431 <- bind_rows(pd,pd_ley21431)

ggplot(pd_ley21431, aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("todas" = "#2C3E50", "ley21431" = "#E74C3C")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 50000)) +
  
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación. Todas y Ley 21.431.",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

Características de estas plataformas

Sexo

Ver código
nombres <- ds %>% names()

sexo <- ds %>% 
  filter(periodo>="2020-02-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, sexo) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,1)) %>% 
  collect()

sexo <- sexo %>% arrange(-desc(periodo))

sexo %>% group_by(sexo) %>% summarise(percent=mean(percent)) %>% 
  mutate(sexo= c("hombre","mujer"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por sexo")
Promedio de distribución por sexo
sexo percent
hombre 84.99
mujer 15.01

Informalidad

Ver código
formalidad <- ds %>% 
  filter(periodo>="2020-02-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, ocup_form) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

formalidad <- formalidad %>% arrange(-desc(periodo))

formalidad %>%
  ggplot(aes(x = periodo, y = percent, color = as.factor(ocup_form),
             group = as.factor(ocup_form))) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  scale_y_continuous(
    labels = label_percent(scale = 1, suffix = "%"),
    limits = c(0, 100)
  ) +
  scale_color_manual(
    values = c("1" = "#1D9E75", "2" = "#D85A30"),
    labels = c("1" = "Formal", "2" = "Informal")
  ) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Según formalidad en primera ocupación",
    x = NULL,
    y = "Porcentaje",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
formalidad %>% 
  tail(2) %>% 
  mutate(ocup_form=c("Formales","Informales"),
         ocupados=round(ocupados)) %>% 
  kable(caption = "Distribución por formalidad en último periodo con datos",
        format.args = list(big.mark = ".", scientific = FALSE))
Distribución por formalidad en último periodo con datos
periodo ocup_form ocupados percent
2026-04-01 Formales 25.712 35.36
2026-04-01 Informales 46.997 64.64

Región

Datos del último año

Ver código
region <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, region) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

region %>% group_by(region) %>% summarise(percent=mean(percent)) %>% 
  mutate(percent=round(percent,2),
         region=c(
   "  1           Tarapacá",
   "  2        Antofagasta",
   "  3            Atacama",
   "  4           Coquimbo",
   "  5         Valparaíso",
   "  6          O'Higgins",
   "  7              Maule",
   "  8             Biobío",
   "  9       La Araucanía",
   " 10          Los Lagos",
   " 11              Aysén",
   " 12         Magallanes",
   " 13      Metropolitana",
   " 14           Los Ríos",
   " 15 Arica y Parinacota",
   " 16              Ñuble"
         )) %>% 
  kable(caption = "Promedio de distribución por región últimos 12 meses")
Promedio de distribución por región últimos 12 meses
region percent
1 Tarapacá 2.08
2 Antofagasta 2.04
3 Atacama 0.93
4 Coquimbo 4.82
5 Valparaíso 8.77
6 O’Higgins 1.48
7 Maule 3.66
8 Biobío 6.34
9 La Araucanía 2.15
10 Los Lagos 2.86
11 Aysén 0.15
12 Magallanes 0.95
13 Metropolitana 60.04
14 Los Ríos 1.17
15 Arica y Parinacota 1.41
16 Ñuble 1.18

Nacionalidad

Datos del último año

Ver código
nacionalidad <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, nacionalidad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

nacionalidad %>% group_by(nacionalidad) %>% 
  summarise(percent=mean(percent)) %>% 
  arrange(-percent) %>% 
  head(3) %>% 
  mutate(nacionalidad=c("Chilena (152)",
                        "Venezuela (862)",
                        "Colombia (170)"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por nacionalidad últimos 12 meses. 3 principales")
Promedio de distribución por nacionalidad últimos 12 meses. 3 principales
nacionalidad percent
Chilena (152) 63.91
Venezuela (862) 25.20
Colombia (170) 5.12
Ver código
nacionalidad_2022 <- ds %>% 
  filter(periodo>="2022-03-01" &  periodo<="2024-03-01" &
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, nacionalidad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

nacionalidad_2022 %>% group_by(nacionalidad) %>% summarise(percent=mean(percent)) %>%
  arrange(-percent) %>% 
  head(3) %>% 
  mutate(nacionalidad=c("Chilena (152)",
                        "Venezuela (862)",
                        "Colombia (170)"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por nacionalidad en 2022-2023. 3 principales")
Promedio de distribución por nacionalidad en 2022-2023. 3 principales
nacionalidad percent
Chilena (152) 58.71
Venezuela (862) 34.47
Colombia (170) 3.69

Edad

Datos del último año

Ver código
edad <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, tramo_edad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

edad %>% 
  group_by(tramo_edad) %>% 
  summarise(percent=round(mean(percent),1)) %>% 
  mutate(tramo_edad=     
   c("15 a 19 años",
    "20 a 24 años",
    "25 a 29 años",
    "30 a 34 años",
    "35 a 39 años",
    "40 a 44 años",
    "45 a 49 años",
    "50 a 54 años",
    "55 a 59 años",
    "60 a 64 años",
    "65 a 69 años",
    "70 años o más")) %>% 
  kable(caption = "Promedio de distribución por edad últimos 12 meses")
Promedio de distribución por edad últimos 12 meses
tramo_edad percent
15 a 19 años 1.2
20 a 24 años 5.2
25 a 29 años 14.1
30 a 34 años 23.7
35 a 39 años 19.3
40 a 44 años 11.4
45 a 49 años 8.1
50 a 54 años 6.1
55 a 59 años 5.6
60 a 64 años 3.7
65 a 69 años 0.7
70 años o más 1.2

Segunda ocupación

Ver código
# library(haven)
# ene_last <- read_dta("~/Library/CloudStorage/OneDrive-UniversidadCatólicadeChile/PROSPECTIVA SpA/minuta ENE/ene_empleo/input/ene-2026-03-fma.dta")
# ene_last %>% select("plataformas_digitales", "pd_especifique",  "b19"   ,                "dependencia_segunda" , "sda_pd",   "sda_pd_especifique"  )

segunda <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect() 

segunda <- segunda %>% arrange(-desc(periodo))

nombres_2da <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  group_by(sda_pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%   filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

head(nombres_2da,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)
Plataformas Ocupados mensualizado
UBER 2.736
UBER EATS 639
CORNERSHOP 390
INDRIVER 302
MERCADOLIBRE 281
PEDIDOS YA 255
RAPPI 193
DIDI 168
CABIFY 166
UBER DIDI 93
Ver código
segunda <- segunda %>% select(periodo,ocupados) %>% mutate(tipo="segunda_ley21431")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

segunda <- pd %>% select(periodo) %>% mutate(ocupados = (pd_ley21431[pd_ley21431$tipo == "ley21431", "ocupados"] + pd_ley21431[pd_ley21431$tipo == "segunda_ley21431", "ocupados"])) %>% mutate(tipo="ley21431_1y2")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

pd_ley21431 %>% 
  filter(tipo!="todas") %>% 
ggplot(aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("segunda_ley21431" = "#2C3E50", 
                                "ley21431" = "#E74C3C",
                                "ley21431_1y2"="#6A0DAD")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 10000)) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Primera y segunda ocupación",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431_1_2.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

pd_ley21431 %>% tidyr::pivot_wider(names_from = tipo,values_from = ocupados) %>% writexl::write_xlsx("output/tablas/numero_plataformas.xlsx")

Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años

Ver código
nuevas <- ds %>% 
  filter(periodo=="2026-04-01" | periodo=="2022-04-01" & 
           plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo,pd_especifique) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

nuevas <- nuevas %>% 
  mutate(ocupados=round(ocupados)) %>% 
  tidyr::pivot_wider(names_from = periodo, values_from = ocupados,
                         values_fill = 0) 

nuevas %>%  
  mutate(variacion_porc=round((`2026-04-01` - `2022-04-01`)/`2022-04-01`*100,1),
         `2026-04-01`=round(`2026-04-01`),
         `2022-04-01`=round(`2022-04-01`)) %>% 
  arrange(-variacion_porc, -`2026-04-01`) %>% 
  kable(caption = "Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años")
Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años
pd_especifique 2022-04-01 2026-04-01 variacion_porc
BOOSMAP 0 1145 Inf
PICKER UP 0 592 Inf
MERCADOLIBRE INSTAGRAM 0 533 Inf
AMIDA 0 404 Inf
ZUBALE 0 236 Inf
UBER DIDI 0 192 Inf
WHATSAPP UBER 0 178 Inf
ONLYFANS 0 174 Inf
INSTAGRAM TIKTOK WHATSAPP 0 172 Inf
PREPLY 0 161 Inf
WHATSAPP INDRIVER 0 148 Inf
PICKER 0 124 Inf
VALDISHOPPER 0 111 Inf
BEHANCE 0 66 Inf
MARKETPLACE WHATSAPP 0 48 Inf
MERCADOLIBRE 898 4098 356.3
DIDI 1604 5295 230.1
INDRIVER 947 2504 164.4
UBER EATS 4285 10353 141.6
CABIFY 336 682 103.0
UBER 21708 39475 81.8
DIDI UBER 200 307 53.5
PEDIDOS YA 4497 4203 -6.5
RAPPI 4548 1508 -66.8
YAPO 188 0 -100.0
BEAT 1007 0 -100.0
CORNERSHOP 7131 0 -100.0
SAWU 920 0 -100.0
SHOPPER 458 0 -100.0
TRANSVIP 795 0 -100.0
FOXER 2641 0 -100.0