Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Grupo_9_R.R
2714 views
1
########################### Workgroup7 - ############################
2
3
library(readxl)
4
library(lubridate)
5
library(tidyverse)
6
library(stringr)
7
library(dplyr)
8
9
10
"Set Directorio"
11
12
user <- Sys.getenv("USERNAME") # username
13
14
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Lab8") ) # set directorio
15
16
data <- read_excel("../data/crime_data/data_administrativa.xlsx")
17
18
19
20
#-------------------------------------------------------------------------------
21
"Ej.1 "
22
#Convertir el nombre de las variables a minúscula
23
24
colnames(data) <- tolower(colnames(data))
25
colnames(data)
26
27
#-------------------------------------------------------------------------------
28
"Ej.2"
29
#Fíjese que el nombre de la persona tiene puntuaciones y número,
30
#retirar todo aquello que no permita identificar el nombre correcto
31
32
data$nombre<- apply(data['nombre'],
33
1 ,
34
function(x) str_replace(x,"[^a-zA-Z\\s]+",''))
35
36
37
data$nombre
38
39
40
#Reemplaza lo que sea diferente de letras (minúsculas y mayúsculas) y espacios (con 1 o más ocurrencias)
41
#con espacio en blanco
42
43
#-------------------------------------------------------------------------------
44
"Ej.3"
45
#Limpiar la fecha de nacimiento de aquellos elementos que la ensucien.
46
#Luego crear otra variable con el formato de fecha.
47
48
data['born_date'] <- apply (data['born_date'],
49
1 ,
50
function(x) str_match(x,"[0-9]*/[0-9]*/[0-9]*"))
51
data$born_date
52
53
#extrae lo que tenga la estructura de numeros con "/"
54
#se usa "*" para no especificar la cantidad de cifras, ya sea en el día, mes o año
55
56
#Cambio de formato a "Date" de born_date en otra variable:
57
data$nacim <- as.Date(data$born_date, format = '%d/%m/%Y')
58
59
#Comprobar formato de las variables
60
sapply(data, class)
61
62
#-------------------------------------------------------------------------------
63
"Ej.4"
64
#Limpiar la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.
65
66
data$age<- apply(data['age'],
67
1 ,
68
function(x) str_replace(x,"[^\\d]+",''))
69
data$age
70
#reemplaza todo lo que sea diferente de dígitos con 1 o más ocurrencias con espacios en blanco
71
72
73
#-------------------------------------------------------------------------------
74
"Ej.5"
75
## 5.0 dummies según el rango del sentenciado en la organización criminal
76
'dum1: toma el valor de 1 si el sentenciado fue líder de la banda criminal
77
dum2: toma el valor de 1 si el sentenciado fue cabecilla local
78
dum3: toma el valor de 1 si el sentenciado fue cabecilla regional
79
dum4: toma el valor de 1 si el sentenciado fue sicario
80
dum5: toma el valor de 1 si el sentenciado realizó extorsión
81
dum6: toma el valor de 1 si el sentenciado fue miembro regular
82
dum7: toma el valor de 1 si el sentenciado fue novato o principiante
83
'
84
data <- data %>% mutate(dum1 = ifelse(str_detect(rank,"(lider de la banda criminal)"), 1 , 0 ),
85
dum2 = ifelse(str_detect(rank,"(cabecilla local)"), 1 , 0 ),
86
dum3 = ifelse(str_detect(rank,"(cabecilla regional)"), 1 , 0 ),
87
dum4 = ifelse(str_detect(rank,"(sicario)"), 1 , 0 ),
88
dum5 = ifelse(str_detect(rank,"(ext)"), 1 , 0 ),
89
dum6 = ifelse(str_detect(rank,"^miembro"), 1 , 0 ),
90
dum7 = ifelse(str_detect(rank,"no([\\w*]*)to") | str_detect(rank,"prin"), 1 , 0 ),
91
)
92
93
data$dum1
94
data$dum2
95
data$dum3
96
data$dum4
97
data$dum5
98
data$dum6
99
data$dum7
100
101
102
#-------------------------------------------------------------------------------
103
"Ej.7"
104
105
##Extraer el usuario del correo electrónico
106
data$usuario <- sapply(data$correo_abogado,
107
function(x) str_extract(x,"[\\w+]+(?=@)"))
108
109
data["usuario"]
110
111
#-------------------------------------------------------------------------------
112
"Ej.8"
113
##Crear una columna que contenga solo la información del número de dni (por ejemplo: 01-75222677)"
114
115
data$DNI <- apply(data['dni'],
116
1 ,
117
function(x) gsub("[a-z]+", '', x) )
118
119
data$DNI
120
121
#-------------------------------------------------------------------------------
122
"Ej.9"
123
124
## A partir de la columna observaciones, crear las siguiente variables:
125
126
# crimen: debe contener información del delito cometido"
127
data$observaciones
128
129
data$crimen <- sapply(data$observaciones,
130
131
function(x) {
132
match1= str_extract(x,"((?<=por)[\\w*\\s]+)")
133
match = str_extract(x, "(robo)")
134
135
if (! is.na(match) ) {
136
return(match)
137
}
138
139
140
if ( is.na(match) & !is.na(match1) ){
141
return(match1)
142
}
143
144
else {
145
return(NA)
146
}
147
} )
148
data["crimen"]
149
150
#Nota, se tuvo que usar match1 y match porque existía conflictos para extraer la
151
#observación 15 (que no tenía coma) y 20 en el que el delito estaba al inicio
152
#con primer if se busca que la prioridad sea la palabra robo, entonces,
153
#si ello ocurre aparecerá en la columna 'crimen'
154
#luego, la segunda opcion es que aparece otra delito (no robo), aparece en
155
#match1 y eso retorna en la columna crimen
156
157
158
# n_hijos: cantidad de hijos del criminal"
159
160
data$n_hijos <- sapply(data$observaciones,
161
function(x) str_extract(x,"\\d{1,2}(?= hij)"))
162
data['n_hijos']
163
164
# edad_inicio : edad de inicio en actividades criminales"
165
166
data$edad_inicio <- sapply(data$observaciones,
167
function(x) str_extract(x,"\\d{1,2}(?= años)"))
168
169
data['edad_inicio']
170
171
172
173