R Markdown

library (tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
delitos <- read.csv("https://cdaj.netlify.app/data/delitos_barrios.csv")

#Practico algunas funciones

summary(delitos)
##    periodo              tipo             subtipo             barrio         
##  Length:3188        Length:3188        Length:3188        Length:3188       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##      total       
##  Min.   :  1.00  
##  1st Qu.:  3.00  
##  Median :  8.00  
##  Mean   : 20.93  
##  3rd Qu.: 22.00  
##  Max.   :393.00
delitos <- read.csv("https://cdaj.netlify.app/data/delitos_barrios.csv", stringsAsFactors = TRUE)
summary(delitos)
##     periodo                        tipo                 subtipo    
##  01/2020: 284   Homicidio            : 163                  :1166  
##  02/2020: 281   Hurto (sin violencia):1087   Siniestro Vial : 644  
##  03/2020: 280   Lesiones             : 575   Con uso de moto: 517  
##  12/2020: 280   Robo (con violencia) :1363   Hurto Automotor: 504  
##  08/2020: 276                                Robo Automotor : 263  
##  11/2020: 274                                Doloso         :  81  
##  (Other):1513                                (Other)        :  13  
##            barrio         total       
##  Balvanera    :  81   Min.   :  1.00  
##  Barracas     :  81   1st Qu.:  3.00  
##  Flores       :  80   Median :  8.00  
##  Villa Lugano :  80   Mean   : 20.93  
##  Mataderos    :  76   3rd Qu.: 22.00  
##  Villa Soldati:  75   Max.   :393.00  
##  (Other)      :2715
levels(delitos$barrio)
##  [1] ""                  "Agronomía"         "Almagro"          
##  [4] "Balvanera"         "Barracas"          "Belgrano"         
##  [7] "Boca"              "Boedo"             "Caballito"        
## [10] "Chacarita"         "Coghlan"           "Colegiales"       
## [13] "Constitución"      "Flores"            "Floresta"         
## [16] "La Boca"           "Liniers"           "Mataderos"        
## [19] "Monserrat"         "Monte Castro"      "Nueva Pompeya"    
## [22] "Nuñez"             "Palermo"           "Parque Avellaneda"
## [25] "Parque Chacabuco"  "Parque Chas"       "Parque Patricios" 
## [28] "Paternal"          "Puerto Madero"     "Recoleta"         
## [31] "Retiro"            "Saavedra"          "San Cristóbal"    
## [34] "San Nicolás"       "San Telmo"         "Vélez Sársfield"  
## [37] "Versalles"         "Villa Crespo"      "Villa Del Parque" 
## [40] "Villa Devoto"      "Villa Gral. Mitre" "Villa Lugano"     
## [43] "Villa Luro"        "Villa Ortuzar"     "Villa Pueyrredón" 
## [46] "Villa Real"        "Villa Riachuelo"   "Villa Santa Rita" 
## [49] "Villa Soldati"     "Villa Urquiza"
levels(delitos$tipo)
## [1] "Homicidio"             "Hurto (sin violencia)" "Lesiones"             
## [4] "Robo (con violencia)"
levels(delitos$periodo)
##  [1] "01/2020" "02/2020" "03/2020" "04/2020" "05/2020" "06/2020" "07/2020"
##  [8] "08/2020" "09/2020" "10/2020" "11/2020" "12/2020"

#Operacion “JOIN” Descargo la columna de comunas desde un nuevo data set

barrios_comunas <- read.csv("https://cdaj.netlify.app/data/barrios_comunas.csv")
delitos <- left_join(delitos, barrios_comunas)
## Joining with `by = join_by(barrio)`
head(delitos)
##   periodo      tipo        subtipo        barrio total comuna
## 1 01/2020 Homicidio         Doloso      Barracas     1      4
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4
## 3 01/2020 Homicidio         Doloso        Retiro     1      1
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3

#Guardado de dataframe “mejorado”

write.csv(delitos, "delitos.csv", row.names = FALSE)
delitos <- read.csv("delitos.csv")
getwd 
## function () 
## .Internal(getwd())
## <bytecode: 0x0000011cecd8c6d0>
## <environment: namespace:base>

Consulto en foro

#Usando Select

names(delitos)
## [1] "periodo" "tipo"    "subtipo" "barrio"  "total"   "comuna"
seleccion <- select(delitos, periodo, total)
head(seleccion)
##   periodo total
## 1 01/2020     1
## 2 01/2020     1
## 3 01/2020     1
## 4 01/2020     1
## 5 01/2020     1
## 6 01/2020     1

#Por contigüidad

seleccion <- select(delitos, tipo:barrio)
head(seleccion)
##        tipo        subtipo        barrio
## 1 Homicidio         Doloso      Barracas
## 2 Homicidio         Doloso Nueva Pompeya
## 3 Homicidio         Doloso        Retiro
## 4 Homicidio         Doloso      Saavedra
## 5 Homicidio      Femicidio  Villa Devoto
## 6 Homicidio Siniestro Vial     Balvanera

Para omitir una categoria

seleccion <- select(delitos, -subtipo)
head(seleccion)
##   periodo      tipo        barrio total comuna
## 1 01/2020 Homicidio      Barracas     1      4
## 2 01/2020 Homicidio Nueva Pompeya     1      4
## 3 01/2020 Homicidio        Retiro     1      1
## 4 01/2020 Homicidio      Saavedra     1     12
## 5 01/2020 Homicidio  Villa Devoto     1     11
## 6 01/2020 Homicidio     Balvanera     1      3

Para omitir varias columnas contigüas

seleccion <- select(delitos, -(subtipo:total))
head(seleccion)
##   periodo      tipo comuna
## 1 01/2020 Homicidio      4
## 2 01/2020 Homicidio      4
## 3 01/2020 Homicidio      1
## 4 01/2020 Homicidio     12
## 5 01/2020 Homicidio     11
## 6 01/2020 Homicidio      3
seleccion <- select(delitos, -tipo, -barrio)
head(seleccion)
##   periodo        subtipo total comuna
## 1 01/2020         Doloso     1      4
## 2 01/2020         Doloso     1      4
## 3 01/2020         Doloso     1      1
## 4 01/2020         Doloso     1     12
## 5 01/2020      Femicidio     1     11
## 6 01/2020 Siniestro Vial     1      3

Practico funcion de filtrado “filter” de filas

seleccion <- filter(delitos, barrio == "Retiro", periodo == "01/2020")
head(seleccion)
##   periodo                  tipo         subtipo barrio total comuna
## 1 01/2020             Homicidio          Doloso Retiro     1      1
## 2 01/2020 Hurto (sin violencia)                 Retiro   130      1
## 3 01/2020 Hurto (sin violencia) Hurto Automotor Retiro     2      1
## 4 01/2020              Lesiones  Siniestro Vial Retiro    16      1
## 5 01/2020  Robo (con violencia)                 Retiro   165      1
## 6 01/2020  Robo (con violencia) Con uso de moto Retiro    12      1
seleccion <- filter(delitos, barrio == "Barracas", periodo == "09/2020")
head(seleccion)
##   periodo                  tipo                      subtipo   barrio total
## 1 09/2020             Homicidio                       Doloso Barracas     1
## 2 09/2020             Homicidio Travesticidio/Transfemicidio Barracas     1
## 3 09/2020 Hurto (sin violencia)                              Barracas    60
## 4 09/2020 Hurto (sin violencia)              Hurto Automotor Barracas     5
## 5 09/2020              Lesiones               Siniestro Vial Barracas    15
## 6 09/2020  Robo (con violencia)                              Barracas    98
##   comuna
## 1      4
## 2      4
## 3      4
## 4      4
## 5      4
## 6      4
seleccion <- filter(delitos, barrio == "Coghlan", periodo == "08/2020")
head(seleccion)
##   periodo                  tipo         subtipo  barrio total comuna
## 1 08/2020 Hurto (sin violencia)                 Coghlan     3     12
## 2 08/2020 Hurto (sin violencia) Hurto Automotor Coghlan     1     12
## 3 08/2020              Lesiones  Siniestro Vial Coghlan     1     12
## 4 08/2020  Robo (con violencia)                 Coghlan     7     12
## 5 08/2020  Robo (con violencia) Con uso de moto Coghlan     1     12

#Filtrando numeros

seleccion <- filter(delitos, total > 100)
head(seleccion)
##   periodo                  tipo subtipo    barrio total comuna
## 1 01/2020 Hurto (sin violencia)           Almagro   142      5
## 2 01/2020 Hurto (sin violencia)         Balvanera   306      3
## 3 01/2020 Hurto (sin violencia)          Belgrano   142     13
## 4 01/2020 Hurto (sin violencia)         Caballito   157      6
## 5 01/2020 Hurto (sin violencia)            Flores   143      7
## 6 01/2020 Hurto (sin violencia)         Monserrat   127      1

#Uso del “o” en barra |

seleccion <- filter(delitos, barrio == "Caballito" | barrio == "Monserrat")
head(seleccion)
##   periodo                  tipo         subtipo    barrio total comuna
## 1 01/2020             Homicidio  Siniestro Vial Monserrat     2      1
## 2 01/2020 Hurto (sin violencia)                 Caballito   157      6
## 3 01/2020 Hurto (sin violencia)                 Monserrat   127      1
## 4 01/2020 Hurto (sin violencia) Hurto Automotor Caballito    28      6
## 5 01/2020 Hurto (sin violencia) Hurto Automotor Monserrat     2      1
## 6 01/2020              Lesiones  Siniestro Vial Caballito    36      6
seleccion <- filter(delitos, !(tipo == "Homicidio" & subtipo == "Siniestro Vial"))
head(seleccion)
##   periodo                  tipo   subtipo        barrio total comuna
## 1 01/2020             Homicidio    Doloso      Barracas     1      4
## 2 01/2020             Homicidio    Doloso Nueva Pompeya     1      4
## 3 01/2020             Homicidio    Doloso        Retiro     1      1
## 4 01/2020             Homicidio    Doloso      Saavedra     1     12
## 5 01/2020             Homicidio Femicidio  Villa Devoto     1     11
## 6 01/2020 Hurto (sin violencia)                             5     NA
seleccion <- filter(delitos, !(tipo == "Robo" & barrio == "Boca"))
head(seleccion)
##   periodo      tipo        subtipo        barrio total comuna
## 1 01/2020 Homicidio         Doloso      Barracas     1      4
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4
## 3 01/2020 Homicidio         Doloso        Retiro     1      1
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3
seleccion <- filter(delitos, tipo == "Robo", barrio == "Boca")
head(seleccion)
## [1] periodo tipo    subtipo barrio  total   comuna 
## <0 rows> (or 0-length row.names)
seleccion <- filter(delitos, !(tipo == "Robo" & barrio == "Boca"))
head(seleccion) 
##   periodo      tipo        subtipo        barrio total comuna
## 1 01/2020 Homicidio         Doloso      Barracas     1      4
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4
## 3 01/2020 Homicidio         Doloso        Retiro     1      1
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3
seleccion <- filter(delitos, tipo == "Robo" & barrio == "Boca")
head(seleccion)
## [1] periodo tipo    subtipo barrio  total   comuna 
## <0 rows> (or 0-length row.names)
seleccion <- filter(delitos, tipo == "Robo (con violencia)" & !(subtipo == "Robo Automotor"))
head(seleccion)
##   periodo                 tipo subtipo    barrio total comuna
## 1 01/2020 Robo (con violencia)                       7     NA
## 2 01/2020 Robo (con violencia)         Agronomía    13     15
## 3 01/2020 Robo (con violencia)           Almagro   206      5
## 4 01/2020 Robo (con violencia)         Balvanera   323      3
## 5 01/2020 Robo (con violencia)          Barracas   206      4
## 6 01/2020 Robo (con violencia)          Belgrano   155     13
seleccion <- filter(delitos, subtipo == "Con uso de moto" & !(barrio == "Almagro"))
head(seleccion)
##   periodo                 tipo         subtipo    barrio total comuna
## 1 01/2020 Robo (con violencia) Con uso de moto Agronomía     2     15
## 2 01/2020 Robo (con violencia) Con uso de moto Balvanera    33      3
## 3 01/2020 Robo (con violencia) Con uso de moto  Barracas    33      4
## 4 01/2020 Robo (con violencia) Con uso de moto  Belgrano    24     13
## 5 01/2020 Robo (con violencia) Con uso de moto      Boca     5      4
## 6 01/2020 Robo (con violencia) Con uso de moto     Boedo     9      5

#Ordenar filas “Arrange”

ordenado <- arrange(delitos, total)
head(ordenado)
##   periodo      tipo        subtipo        barrio total comuna
## 1 01/2020 Homicidio         Doloso      Barracas     1      4
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4
## 3 01/2020 Homicidio         Doloso        Retiro     1      1
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3
ordenado <- arrange(delitos, barrio)
head(ordenado)
##   periodo                  tipo        subtipo barrio total comuna
## 1 01/2020 Hurto (sin violencia)                           5     NA
## 2 01/2020              Lesiones Siniestro Vial           36     NA
## 3 01/2020  Robo (con violencia)                           7     NA
## 4 02/2020 Hurto (sin violencia)                           4     NA
## 5 02/2020              Lesiones Siniestro Vial           31     NA
## 6 02/2020  Robo (con violencia)                           8     NA
ordenado <- arrange(delitos, subtipo)
head(ordenado)
##   periodo                  tipo subtipo    barrio total comuna
## 1 01/2020 Hurto (sin violencia)                       5     NA
## 2 01/2020 Hurto (sin violencia)         Agronomía    14     15
## 3 01/2020 Hurto (sin violencia)           Almagro   142      5
## 4 01/2020 Hurto (sin violencia)         Balvanera   306      3
## 5 01/2020 Hurto (sin violencia)          Barracas    75      4
## 6 01/2020 Hurto (sin violencia)          Belgrano   142     13
ordenado <- arrange(delitos, desc(total))

head(ordenado)
##   periodo                  tipo subtipo    barrio total comuna
## 1 02/2020 Hurto (sin violencia)           Palermo   393     14
## 2 01/2020  Robo (con violencia)           Palermo   362     14
## 3 02/2020  Robo (con violencia)           Palermo   356     14
## 4 01/2020 Hurto (sin violencia)           Palermo   349     14
## 5 01/2020  Robo (con violencia)         Balvanera   323      3
## 6 01/2020 Hurto (sin violencia)         Balvanera   306      3
ordenado <- filter(delitos, !NA )

is.na(ordenado)
##      periodo tipo subtipo barrio total comuna

Duda para el FORO:si filtré del dataframe los NA por qué me aparecen estas columnas ???

#Practico con la funcion “Mutate” que crea columnas nuevas.

seleccion <- mutate(delitos,
                  mes = substr(periodo, 1, 2),
                  año = substr(periodo, 4, 7))
head(seleccion)
##   periodo      tipo        subtipo        barrio total comuna mes  año
## 1 01/2020 Homicidio         Doloso      Barracas     1      4  01 2020
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4  01 2020
## 3 01/2020 Homicidio         Doloso        Retiro     1      1  01 2020
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12  01 2020
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11  01 2020
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3  01 2020

Practico funcion “summarise” para resumir.

seleccion <- summarise(delitos, promedio_totales = mean(total))
head(seleccion)
##   promedio_totales
## 1         20.93005
delitos <- mutate(delitos,
                  mes = substr(periodo, 1, 2),
                  año = substr(periodo, 4, 7))
                                
head(delitos) 
##   periodo      tipo        subtipo        barrio total comuna mes  año
## 1 01/2020 Homicidio         Doloso      Barracas     1      4  01 2020
## 2 01/2020 Homicidio         Doloso Nueva Pompeya     1      4  01 2020
## 3 01/2020 Homicidio         Doloso        Retiro     1      1  01 2020
## 4 01/2020 Homicidio         Doloso      Saavedra     1     12  01 2020
## 5 01/2020 Homicidio      Femicidio  Villa Devoto     1     11  01 2020
## 6 01/2020 Homicidio Siniestro Vial     Balvanera     1      3  01 2020
agrupado <- group_by(delitos, año, mes)

sumario <- summarise(agrupado, promedio = mean(total))
## `summarise()` has grouped output by 'año'. You can override using the `.groups`
## argument.
head(sumario)
## # A tibble: 6 × 3
## # Groups:   año [1]
##   año   mes   promedio
##   <chr> <chr>    <dbl>
## 1 2020  01       34.7 
## 2 2020  02       33.4 
## 3 2020  03       21.5 
## 4 2020  04        8.98
## 5 2020  05       12.7 
## 6 2020  06       14.4
agrupado <- group_by(delitos, año, mes, barrio)

sumario <- summarise(agrupado, promedio = mean(total))
## `summarise()` has grouped output by 'año', 'mes'. You can override using the
## `.groups` argument.
head(sumario)
## # A tibble: 6 × 4
## # Groups:   año, mes [1]
##   año   mes   barrio      promedio
##   <chr> <chr> <chr>          <dbl>
## 1 2020  01    ""             16   
## 2 2020  01    "Agronomía"     7.75
## 3 2020  01    "Almagro"      79.4 
## 4 2020  01    "Balvanera"   103   
## 5 2020  01    "Barracas"     50   
## 6 2020  01    "Belgrano"     57.5
sumario <- summarise(delitos, total = sum(total))

#Uso del Pipe %<%, primero filtro mes, luego agrupo mes y barrio, luego sumario de ambos, en descendente y finalmente con %<% obtengo todo

solo_marzo <- filter(delitos, mes == "03")

solo_marzo_agrupado_barrio <- group_by(solo_marzo, barrio)

total_por_barrio_marzo <- summarise(solo_marzo_agrupado_barrio, total = sum(total))

total_por_barrio_marzo_ordenado <- arrange(total_por_barrio_marzo, desc(total))

head(total_por_barrio_marzo_ordenado, 7)
## # A tibble: 7 × 2
##   barrio       total
##   <chr>        <int>
## 1 Palermo        529
## 2 Balvanera      407
## 3 Flores         294
## 4 San Nicolás    282
## 5 Caballito      257
## 6 Recoleta       252
## 7 Villa Lugano   234

##Encadeno las operaciones

delitos %>% 
    filter(mes == "03") %>% 
    group_by(barrio) %>% 
    summarise(total = sum(total)) %>% 
    arrange(desc(total)) %>% 
    head(7)
## # A tibble: 7 × 2
##   barrio       total
##   <chr>        <int>
## 1 Palermo        529
## 2 Balvanera      407
## 3 Flores         294
## 4 San Nicolás    282
## 5 Caballito      257
## 6 Recoleta       252
## 7 Villa Lugano   234

#Finalmente hago el ejercicio UNIDAD 3

#Mejoro mi dataframe quitando los “Id”.

seleccion <- select(seleccion,-ends_with("_id"))

#Uso la funcion select para variables contigüas.

#seleccion <- select(seleccion, censo_anio:duracion_condena_meses)

Uso la función filter.

#seleccion <- filter(seleccion, censo_anio == "2021", provincia_descripcion == "Chaco")
head(seleccion)
##   promedio_totales
## 1         20.93005

#otra

#seleccion <- filter(seleccion, edad > 40)
head(seleccion)
##   promedio_totales
## 1         20.93005

#Uso la función arrange

#ordenado <- arrange(seleccion, establecimiento_descripcion, edad)
head(seleccion)
##   promedio_totales
## 1         20.93005

#Otra

#ordenado <- arrange(seleccion, genero_descripcion, nacionalidad_descripcion)
head(ordenado)
## [1] periodo tipo    subtipo barrio  total   comuna 
## <0 rows> (or 0-length row.names)

#Uso de Mutate, creando dos columnas nuevas de la columna de fecha_condenado.

#seleccion <- mutate(seleccion, año = substr(fecha_condenado, 1, 4),mes = substr(fecha_condenado, 6, 7))
head(seleccion)
##   promedio_totales
## 1         20.93005

Utilizo Summarise y Group_by.

#agrupado <- group_by(seleccion, año, mes)

#sumario <- summarise(agrupado, promedio = mean(edad))

head(sumario)
##   total
## 1 66725
#agrupado <- group_by(seleccion, año, mes)

#sumario <- summarise(agrupado, maximo = max(edad))

head(sumario)
##   total
## 1 66725
#agrupado <- group_by(seleccion, año, mes)

#sumario <- summarise(agrupado, minimo = min(edad))

head(sumario)
##   total
## 1 66725

#El uso de todo encadenado con Pipe.

#sneep_base %>% select(-ends_with("_id"),censo_anio:duracion_condena_meses)%>%  filter(censo_anio == "2021", provincia_descripcion == "Chaco")%>% arrange(genero_descripcion, nacionalidad_descripcion) %>% mutate(año = substr(fecha_condenado, 1, 4), mes = substr(fecha_condenado, 6, 7))%>% group_by(año, mes)%>% summarise(promedio = mean(edad))%>% head(7)