Path: blob/main/Trabajo_grupal/WG7/Grupo2_R.R
2714 views
################ WG7 ############################1## Curso: Laboratorio de R y Python ###########################234library(reshape)5library(haven)6library(readxl)7library(stringr)8library(tidyverse)9#------- Reshape -----------1011"1.0 Set Directorio"1213user <- Sys.getenv("USERNAME") # username1415setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Lab8") ) # set directorio161718# load panel dataset1920crime <- read_xlsx("../data/crime_data/data_administrativa.xlsx")212223# 1. Convertimos el nombre de las variables a minúscula2425colnames(crime) <- tolower(colnames(crime))262728# Verificamos29View(crime)3031#2. Dado que el nombre de la persona tiene puntuaciones y números, nos encargamos32#de retirar todo aquello que no permita identificar el nombre correcto.333435##Para realizarlo, substraemos las variables de LETRAS36crime$nombres_mod <- apply(crime['nombre'],371 ,38function(x) str_replace(x,"[^a-zA-Z\\s]+",''))3940##Ya tenemos nuestra variable nombres limpia en la nueva variable "nombres_mod"414243#3.Limpiamos la fecha de nacimiento de aquellos elementos que la ensucien.444546crime$born_date <- apply(crime['born_date'],471 , # margin 1: aplicar la funcion por filas , por observaciones48function(x) str_replace(x,"(00:00)|(!)|(#%)", ''))4950#3.1 Luego creamos otra variable con el formato de fecha.515253crime$born_date_format <- as.Date(crime$born_date,format='%d/%m/%Y')545556#4 Limpiamos la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.575859# extraemos entonces solo 2 digitos del rango 0-96061crime$edad <- apply(crime['age'],621 ,63function(x) str_extract(x,"[0-9]{2}"))646566###Nuestras variables limpias son las siguientes:6768##nombres_mod69##born_date_format70##edad717273#5 Crear dummies según el rango del sentenciado en la organización criminal74#dum1: toma el valor de 1 si el sentenciado fue líder de la banda criminal75#dum2: toma el valor de 1 si el sentenciado fue cabecilla local76#dum3: toma el valor de 1 si el sentenciado fue cabecilla regional77#dum4: toma el valor de 1 si el sentenciado fue sicario78#dum5: toma el valor de 1 si el sentenciado realizó extorsión79#dum6: toma el valor de 1 si el sentenciado fue miembro regular80#dum7: toma el valor de 1 si el sentenciado fue novato o principiante8182#Creamos todas las dummies con con un condicional ifelse y detect para todo el valor de la variable o con la letra que empiece83#Para dum1 que detecte si la variable es "lider de la banda criminal" y si es asi toma 1 sino 084#Para dum2 que detecte si la variable es "cabecilla local" y si es asi toma 1 sino 085#Para dum3 que detecte si la variable es "cabecilla regional" y si es asi toma 1 sino 086#Para dum4 que detecte si la variable empieza con las letras "sic" y si es asi toma 1 sino 087#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 088#Para dum6 que detecte si la variable empieza con las letra "m" y si es asi toma 1 sino 089#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 09091crime <- crime %>% mutate(92dum1 = ifelse(str_detect(rank,"lider de la banda criminal"), 1 , 0 ),93dum2 = ifelse(str_detect(rank,"cabecilla local"), 1 , 0 ), dum3 = ifelse(str_detect(rank,"cabecilla regional"), 1 , 0 ),94dum4 = ifelse(str_detect(rank,"^sic"), 1 , 0 ), dum5 = ifelse(str_detect(rank,"^e"), 1 , 0),95dum6 = ifelse(str_detect(rank, "^m"), 1 , 0), dum7 = ifelse(str_detect(rank,"(^n)|(^p)"), 1 , 0)96)9798View(crime[ , c("rank","dum1","dum2","dum3","dum4","dum5","dum6","dum7")])99100101102#6 Extraer el usuario del correo electrónico.103104crime$usuario2 <- apply(crime['correo_abogado'],1051 ,106function(x) str_extract(x,"[a-z]+"))107108#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.109110crime$num_dni <- apply(crime['dni'],1111 ,112function(x) str_extract(x,"[0-9]+[-]+[0-9]+"))113114#8 A partir de la columna observaciones, crear las siguiente variables:115116#crimen: debe contener información del delito cometido, y para ello se indica la seccion de texto que debe extraer117118crime$crimen <- apply(crime['observaciones'],1191 ,120function(x) str_match(x,"\\.*[P/p]or\\s([\\w*]*)")[2])121122# n_hijos: cantidad de hijos del criminal123124crime$n_hijos <- apply(crime['observaciones'],1251 ,126function(x) str_match(x,"\\.*[T/t]iene\\s([\\w*]*)")[2])127128# edad_inicio : edad de inicio en actividades criminales129130crime$edad_inicio <- apply(crime['observaciones'],1311 ,132function(x) str_match(x,"\\.*[L/l]os\\s\\s([\\w*]*)")[2])133134135136137