Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Grupo2_R.R
2714 views
1
################ WG7 ############################
2
## Curso: Laboratorio de R y Python ###########################
3
4
5
library(reshape)
6
library(haven)
7
library(readxl)
8
library(stringr)
9
library(tidyverse)
10
#------- Reshape -----------
11
12
"1.0 Set Directorio"
13
14
user <- Sys.getenv("USERNAME") # username
15
16
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Lab8") ) # set directorio
17
18
19
# load panel dataset
20
21
crime <- read_xlsx("../data/crime_data/data_administrativa.xlsx")
22
23
24
# 1. Convertimos el nombre de las variables a minúscula
25
26
colnames(crime) <- tolower(colnames(crime))
27
28
29
# Verificamos
30
View(crime)
31
32
#2. Dado que el nombre de la persona tiene puntuaciones y números, nos encargamos
33
#de retirar todo aquello que no permita identificar el nombre correcto.
34
35
36
##Para realizarlo, substraemos las variables de LETRAS
37
crime$nombres_mod <- apply(crime['nombre'],
38
1 ,
39
function(x) str_replace(x,"[^a-zA-Z\\s]+",''))
40
41
##Ya tenemos nuestra variable nombres limpia en la nueva variable "nombres_mod"
42
43
44
#3.Limpiamos la fecha de nacimiento de aquellos elementos que la ensucien.
45
46
47
crime$born_date <- apply(crime['born_date'],
48
1 , # margin 1: aplicar la funcion por filas , por observaciones
49
function(x) str_replace(x,"(00:00)|(!)|(#%)", ''))
50
51
#3.1 Luego creamos otra variable con el formato de fecha.
52
53
54
crime$born_date_format <- as.Date(crime$born_date,format='%d/%m/%Y')
55
56
57
#4 Limpiamos la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.
58
59
60
# extraemos entonces solo 2 digitos del rango 0-9
61
62
crime$edad <- apply(crime['age'],
63
1 ,
64
function(x) str_extract(x,"[0-9]{2}"))
65
66
67
###Nuestras variables limpias son las siguientes:
68
69
##nombres_mod
70
##born_date_format
71
##edad
72
73
74
#5 Crear dummies según el rango del sentenciado en la organización criminal
75
#dum1: toma el valor de 1 si el sentenciado fue líder de la banda criminal
76
#dum2: toma el valor de 1 si el sentenciado fue cabecilla local
77
#dum3: toma el valor de 1 si el sentenciado fue cabecilla regional
78
#dum4: toma el valor de 1 si el sentenciado fue sicario
79
#dum5: toma el valor de 1 si el sentenciado realizó extorsión
80
#dum6: toma el valor de 1 si el sentenciado fue miembro regular
81
#dum7: toma el valor de 1 si el sentenciado fue novato o principiante
82
83
#Creamos todas las dummies con con un condicional ifelse y detect para todo el valor de la variable o con la letra que empiece
84
#Para dum1 que detecte si la variable es "lider de la banda criminal" y si es asi toma 1 sino 0
85
#Para dum2 que detecte si la variable es "cabecilla local" y si es asi toma 1 sino 0
86
#Para dum3 que detecte si la variable es "cabecilla regional" y si es asi toma 1 sino 0
87
#Para dum4 que detecte si la variable empieza con las letras "sic" y si es asi toma 1 sino 0
88
#Para dum5 que detecte si la variable empieza con la letra "e", ya que hay observaciones con extorsion o extorsionador, y si es asi toma 1 sino 0
89
#Para dum6 que detecte si la variable empieza con las letra "m" y si es asi toma 1 sino 0
90
#Para dum7 que detecte si la variable empieza con las letras "n" o "p", ya que hay observaciones donde no esta bien escrito novato, y si es asi toma 1 sino 0
91
92
crime <- crime %>% mutate(
93
dum1 = ifelse(str_detect(rank,"lider de la banda criminal"), 1 , 0 ),
94
dum2 = ifelse(str_detect(rank,"cabecilla local"), 1 , 0 ), dum3 = ifelse(str_detect(rank,"cabecilla regional"), 1 , 0 ),
95
dum4 = ifelse(str_detect(rank,"^sic"), 1 , 0 ), dum5 = ifelse(str_detect(rank,"^e"), 1 , 0),
96
dum6 = ifelse(str_detect(rank, "^m"), 1 , 0), dum7 = ifelse(str_detect(rank,"(^n)|(^p)"), 1 , 0)
97
)
98
99
View(crime[ , c("rank","dum1","dum2","dum3","dum4","dum5","dum6","dum7")])
100
101
102
103
#6 Extraer el usuario del correo electrónico.
104
105
crime$usuario2 <- apply(crime['correo_abogado'],
106
1 ,
107
function(x) str_extract(x,"[a-z]+"))
108
109
#7 Crear una columna que contenga solo la información del número de dni (por ejemplo: 01-75222677), en este caso se extraen los rangos de numeros como se indica en la estructura.
110
111
crime$num_dni <- apply(crime['dni'],
112
1 ,
113
function(x) str_extract(x,"[0-9]+[-]+[0-9]+"))
114
115
#8 A partir de la columna observaciones, crear las siguiente variables:
116
117
#crimen: debe contener información del delito cometido, y para ello se indica la seccion de texto que debe extraer
118
119
crime$crimen <- apply(crime['observaciones'],
120
1 ,
121
function(x) str_match(x,"\\.*[P/p]or\\s([\\w*]*)")[2])
122
123
# n_hijos: cantidad de hijos del criminal
124
125
crime$n_hijos <- apply(crime['observaciones'],
126
1 ,
127
function(x) str_match(x,"\\.*[T/t]iene\\s([\\w*]*)")[2])
128
129
# edad_inicio : edad de inicio en actividades criminales
130
131
crime$edad_inicio <- apply(crime['observaciones'],
132
1 ,
133
function(x) str_match(x,"\\.*[L/l]os\\s\\s([\\w*]*)")[2])
134
135
136
137