Path: blob/main/Trabajo_grupal/WG7/Grupo_9_R.R
2714 views
########################### Workgroup7 - ############################12library(readxl)3library(lubridate)4library(tidyverse)5library(stringr)6library(dplyr)789"Set Directorio"1011user <- Sys.getenv("USERNAME") # username1213setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Lab8") ) # set directorio1415data <- read_excel("../data/crime_data/data_administrativa.xlsx")16171819#-------------------------------------------------------------------------------20"Ej.1 "21#Convertir el nombre de las variables a minúscula2223colnames(data) <- tolower(colnames(data))24colnames(data)2526#-------------------------------------------------------------------------------27"Ej.2"28#Fíjese que el nombre de la persona tiene puntuaciones y número,29#retirar todo aquello que no permita identificar el nombre correcto3031data$nombre<- apply(data['nombre'],321 ,33function(x) str_replace(x,"[^a-zA-Z\\s]+",''))343536data$nombre373839#Reemplaza lo que sea diferente de letras (minúsculas y mayúsculas) y espacios (con 1 o más ocurrencias)40#con espacio en blanco4142#-------------------------------------------------------------------------------43"Ej.3"44#Limpiar la fecha de nacimiento de aquellos elementos que la ensucien.45#Luego crear otra variable con el formato de fecha.4647data['born_date'] <- apply (data['born_date'],481 ,49function(x) str_match(x,"[0-9]*/[0-9]*/[0-9]*"))50data$born_date5152#extrae lo que tenga la estructura de numeros con "/"53#se usa "*" para no especificar la cantidad de cifras, ya sea en el día, mes o año5455#Cambio de formato a "Date" de born_date en otra variable:56data$nacim <- as.Date(data$born_date, format = '%d/%m/%Y')5758#Comprobar formato de las variables59sapply(data, class)6061#-------------------------------------------------------------------------------62"Ej.4"63#Limpiar la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.6465data$age<- apply(data['age'],661 ,67function(x) str_replace(x,"[^\\d]+",''))68data$age69#reemplaza todo lo que sea diferente de dígitos con 1 o más ocurrencias con espacios en blanco707172#-------------------------------------------------------------------------------73"Ej.5"74## 5.0 dummies según el rango del sentenciado en la organización criminal75'dum1: toma el valor de 1 si el sentenciado fue líder de la banda criminal76dum2: toma el valor de 1 si el sentenciado fue cabecilla local77dum3: toma el valor de 1 si el sentenciado fue cabecilla regional78dum4: toma el valor de 1 si el sentenciado fue sicario79dum5: toma el valor de 1 si el sentenciado realizó extorsión80dum6: toma el valor de 1 si el sentenciado fue miembro regular81dum7: toma el valor de 1 si el sentenciado fue novato o principiante82'83data <- data %>% mutate(dum1 = ifelse(str_detect(rank,"(lider de la banda criminal)"), 1 , 0 ),84dum2 = ifelse(str_detect(rank,"(cabecilla local)"), 1 , 0 ),85dum3 = ifelse(str_detect(rank,"(cabecilla regional)"), 1 , 0 ),86dum4 = ifelse(str_detect(rank,"(sicario)"), 1 , 0 ),87dum5 = ifelse(str_detect(rank,"(ext)"), 1 , 0 ),88dum6 = ifelse(str_detect(rank,"^miembro"), 1 , 0 ),89dum7 = ifelse(str_detect(rank,"no([\\w*]*)to") | str_detect(rank,"prin"), 1 , 0 ),90)9192data$dum193data$dum294data$dum395data$dum496data$dum597data$dum698data$dum799100101#-------------------------------------------------------------------------------102"Ej.7"103104##Extraer el usuario del correo electrónico105data$usuario <- sapply(data$correo_abogado,106function(x) str_extract(x,"[\\w+]+(?=@)"))107108data["usuario"]109110#-------------------------------------------------------------------------------111"Ej.8"112##Crear una columna que contenga solo la información del número de dni (por ejemplo: 01-75222677)"113114data$DNI <- apply(data['dni'],1151 ,116function(x) gsub("[a-z]+", '', x) )117118data$DNI119120#-------------------------------------------------------------------------------121"Ej.9"122123## A partir de la columna observaciones, crear las siguiente variables:124125# crimen: debe contener información del delito cometido"126data$observaciones127128data$crimen <- sapply(data$observaciones,129130function(x) {131match1= str_extract(x,"((?<=por)[\\w*\\s]+)")132match = str_extract(x, "(robo)")133134if (! is.na(match) ) {135return(match)136}137138139if ( is.na(match) & !is.na(match1) ){140return(match1)141}142143else {144return(NA)145}146} )147data["crimen"]148149#Nota, se tuvo que usar match1 y match porque existía conflictos para extraer la150#observación 15 (que no tenía coma) y 20 en el que el delito estaba al inicio151#con primer if se busca que la prioridad sea la palabra robo, entonces,152#si ello ocurre aparecerá en la columna 'crimen'153#luego, la segunda opcion es que aparece otra delito (no robo), aparece en154#match1 y eso retorna en la columna crimen155156157# n_hijos: cantidad de hijos del criminal"158159data$n_hijos <- sapply(data$observaciones,160function(x) str_extract(x,"\\d{1,2}(?= hij)"))161data['n_hijos']162163# edad_inicio : edad de inicio en actividades criminales"164165data$edad_inicio <- sapply(data$observaciones,166function(x) str_extract(x,"\\d{1,2}(?= años)"))167168data['edad_inicio']169170171172173