Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Solucion/script_r.R
2835 views
1
################ Solución R ############################
2
3
### Regex ####
4
5
# clear environment
6
7
rm(list=ls(all=TRUE))
8
9
# load libraries
10
11
librarian::shelf(tidyverse,haven, readxl, lubridate, stringi)
12
13
# stringi para retirar tildes
14
15
user <- Sys.getenv("USERNAME") # username
16
17
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_grupal/WG7/Solucion") ) # set directorio
18
19
20
data_crime <- read_excel("../../../data/crime_data/data_administrativa.xlsx")
21
22
23
# 1.0 nombre de las columnas en minuscula
24
25
26
colnames(data_crime) <- tolower(colnames(data_crime))
27
28
29
30
# Retiramos las tildes (incluso el simbolo de la ñ) de las columnas nombre, rango criminal y observaciones
31
32
data_crime$nombre <- stri_trans_general(data_crime$nombre, id = "Latin-ASCII")
33
34
data_crime$rank <- stri_trans_general(data_crime$rank, id = "Latin-ASCII")
35
36
data_crime$observaciones <- stri_trans_general(data_crime$observaciones, id = "Latin-ASCII")
37
38
# Retiramos los espacios vacios al incio y al final
39
40
# Usaremos trim. Un ejemplo
41
42
str_trim(" Arriba Perú ")
43
44
45
# name, date_born and age clean
46
47
48
data_crime <- data_crime %>% mutate(nombre = str_trim(nombre), rank = str_trim(rank),
49
observaciones = str_trim(observaciones),
50
nombre_clean = str_replace(nombre,"[^a-zA-Z\\s]",''),
51
date_clean = str_replace(born_date,"(\"#%)|(!)|(00:00)",''),
52
age_clean = str_replace(age,"\\D+",''),
53
new_date = dmy( date_clean ) # usamos lubridate
54
)
55
56
# Dummies por rango criminal
57
58
data_crime <- data_crime |> mutate(
59
dum1 = ifelse(str_detect(rank,"criminal$"), 1 , 0 ),
60
dum2 = ifelse(str_detect(rank,"local$"), 1 , 0 ),
61
dum3 = ifelse(str_detect(rank,"regional$"), 1 , 0 ),
62
dum4 = ifelse(str_detect(rank,"sicario"), 1 , 0 ),
63
dum5 = ifelse(str_detect(rank,"^extor"), 1 , 0 ),
64
dum6 = ifelse(str_detect(rank,"miembro"), 1 , 0 ),
65
dum7 = ifelse(str_detect(rank,"(^princ)|(^nov)|(^noa)"), 1 , 0 ),
66
user = str_match(correo_abogado, "(\\w+)\\@.*")[,2]
67
)
68
69
# Uso de Look around regex
70
71
data_crime <- data_crime |> mutate(
72
dni_clean = str_extract(dni,"(?<=dni es )[\\d+\\-]+"), # Positive lpok behind
73
crimen = str_extract(observaciones,"(?<=sentenciado por )[\\w+\\s]+"),
74
cant_hijos = str_extract(observaciones,"(?<=tiene |tener )\\d+"),
75
inicio_edad = str_extract(observaciones,"\\d+(?= anos)") # Negative look behind
76
77
)
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105