Funciones importantes

trimws

Funciona para eliminar espacios en los extremos de una variable de tipo carácter (a la derecha, izquierda o ambos).

txt1<-c(' H o l a ')
  1. Por defecto elimina ambos espacios, tambien especificando el parámetro which=‘both’.
trimws(txt1)
## [1] "H o l a"
trimws(txt1,which = 'both')
## [1] "H o l a"
  1. Además es posible eliminar un solo espacio a la derecha.
trimws(txt1,which = 'right')
## [1] " H o l a"
  1. O a la izquerda.
trimws(txt1,which = 'left')
## [1] "H o l a "

paste

Esta función hace posible unificar variables de cualquier tipo, en una sola de tipo carácter.

  1. Por ejemplo sirve para concatenar las iteraciones de un ciclo determinado.
for (i in 1:5) {
  print(paste('numero de iteracion',i,sep = ':'))
}
## [1] "numero de iteracion:1"
## [1] "numero de iteracion:2"
## [1] "numero de iteracion:3"
## [1] "numero de iteracion:4"
## [1] "numero de iteracion:5"
  1. Para unificar las variables separadas del nombre completo de un usuario.
nombre<-'Juan'
apellido_1<-'Rodriguez'
apellido_2<-'Acevedo'
paste(nombre,apellido_1,apellido_2)
## [1] "Juan Rodriguez Acevedo"

Por defecto el argumento sep es un espacio simple: ’ ’.

  1. Por ultimo para operar con vectores existe el argumento collapse que se puede usar para conjuntar una fecha.
fecha<-c('1841','06','19')
as.Date(paste(fecha,collapse = '-'))
## [1] "1841-06-19"

strsplit

Esta función permite separar valores en una variable de tipo carácter mediante un delimitador.

  1. Por ejemplo para obtener por separado el nombre y apellidos de una variable conjunta.
nombre_completo<-c('Eduardo Ramirez Rubio')

strsplit(nombre_completo,' ')
## [[1]]
## [1] "Eduardo" "Ramirez" "Rubio"
  1. Es importante mencionar que cuando el delimitador es un carácter especial es necesario introducirlo como ‘\$’.
  nombre_completo<-c('Eduardo$Ramirez$Rubio')

  strsplit(nombre_completo,'\\$')
## [[1]]
## [1] "Eduardo" "Ramirez" "Rubio"
  1. Para obtener el nombre en especifico de un registro.
nombre_completo<-c('Eduardo Ramirez Rubio')

strsplit(nombre_completo,' ')[[1]][1]
## [1] "Eduardo"

substr

Se utiliza para extraer un subconjunto de caracteres de una variable indicando el índice de inicio y el índice final de este.

  1. Para obtener el año de nacimiento de la CURP.
CURP<-'FABM770222MMSJNR00'

substr(CURP,5,6)
## [1] "77"
  1. Para conocer la homoclave del RFC.
RFC<-'ABC680524P76'

substr(RFC,10,12)
## [1] "P76"
  1. En conjunto con la función paste y gsub se puede obtener la CURP como sigue.
apellido_1<-'CHAVEZ'
apellido_2<-'LOPEZ'
nombre<-'JOSE'
fecha_nac<-'11/06/1986'
sexo<-'H'
entidad<-'DF'
homoclave<-'XE9'

vocal<-c('a','e','i','o','u')

ap_ctes<-function(apellido_1){
  apellido_ctes<-apellido_1
  for (i in 1:5) {
      apellido_ctes<-gsub(toupper(vocal[i]),'',c(apellido_ctes))
  }
  return(apellido_ctes)
}


CURP<-paste(substr(apellido_1,1,2),
      substr(apellido_2,1,1),substr(nombre,1,1),
      substr(fecha_nac,9,10),substr(fecha_nac,4,5),
      substr(fecha_nac,1,2),sexo,entidad,substr(ap_ctes(apellido_1),2,2),
      substr(ap_ctes(apellido_2),2,2),homoclave
      ,sep = '')

CURP
## [1] "CHLJ860611HDFHPXE9"

gsub

El uso principal de esta función es el de sustituir valores en un vector o variable por los que se indique.

  1. Es importante mencionar que para sustituir carácteres especiales es necesario utilizar el prefijo ‘\’.
flujos_efectivo<-c('$10000','$12000','$96206')

gsub('\\$','',flujos_efectivo)
## [1] "10000" "12000" "96206"
  1. Otro de ejemplo de su uso es el visto en el 3er ejemplo de substr con la creación de la función para extraer una variable con las consonantes del apellido.
ap_ctes<-function(apellido_1){
  apellido_ctes<-apellido_1
  for (i in 1:5) {
      apellido_ctes<-gsub(toupper(vocal[i]),'',c(apellido_ctes))
  }
  return(apellido_ctes)
}

ap_ctes('SANCHEZ')
## [1] "SNCHZ"
  1. Finalmente, veremos un ejemplo más amplio en el conteo de letras a (en todas sus variantes a, á, A) del ejercicio final

grepl

Esta funcion se utiliza para reconocer si un patrón se encuentra en un vector o variable, devolviendo un valor lógico según sea el caso

  1. Un primer ejemplo es encontrar los acentos en una variable carácter
var_char<-'RAMÍREZ'

var_char<-toupper(var_char)

vocal_acent<-c('Á','É','Í','Ó','Ú')

accent<-c()
for (i in 1:5) {
  accent[i]<-grepl(vocal_acent[i],var_char)
}

sum(accent)#Indica que si hay plabra acentuadas en la variable
## [1] 1
  1. Para reconocer que tipo de separador se utilizó al ingresar una fecha
fecha<-'2003/12/18'

grepl('/',fecha)
## [1] TRUE
  1. Clasificar sangre sin considerar factor RH.
sangre<-c('O+','O-','AB-')

grepl('O',sangre)
## [1]  TRUE  TRUE FALSE

grep

Devuelve la posición en el vector en la que se encuentra el patrón.

  1. Para identificar que libros contienen la palabra clave historia en su título y así clasificarlos.
lib<-c('Historia del mundo','Calculo Spivak','Historia de México','Ciencias')
lib<-tolower(lib)

grep('historia',lib)
## [1] 1 3
lib[c(1,3)]
## [1] "historia del mundo" "historia de méxico"

2.También es posible que en vez de la posición, devuelva el valor explícito ajustando el parámetro ‘value=T’.

lib<-c('Historia del mundo','Calculo Spivak','Historia de México','Ciencias')
lib<-tolower(lib)

grep('historia',lib,value = T)
## [1] "historia del mundo" "historia de méxico"
lib[c(1,3)]
## [1] "historia del mundo" "historia de méxico"
  1. Para en una variable carácter, con ayuda de la función, ubicar las posiciones de cierta letra.
palabra<-'Actuarial'
palabra<-tolower(palabra)

grep('a',strsplit(palabra,split = '')[[1]])
## [1] 1 5 8

length

Se utiliza para conocer la longitud de un vector (el número de entradas).

  1. Por ejemplo para conocer el número de alumnos en un grupo y saber si se cerrará o no.
alumnos_gp1<-c('Eduardo','Juan','Pedro','Luisa')

alumnos_gp2<-c('Eduardo','Juan','Pedro','Luisa','Francisco','Pedro','')

cerrara<-function(alumnos_gp){
  if(length(alumnos_gp)<6){print('Cerrado')}
  else{print('Abierto')}
  }

cerrara(alumnos_gp1)
## [1] "Cerrado"
cerrara(alumnos_gp2)
## [1] "Abierto"
  1. Verificar que dos vectores tienen la misma longitud y combinarlos en una tabla.
vec1<-c('Eduardo','Juan','Pedro','Luisa')
vec2<-c('5664821795','5569713258','5597134982','5593617426')

if(length(vec1)==length(vec2)){
  cbind(vec1,vec2)
}
##      vec1      vec2        
## [1,] "Eduardo" "5664821795"
## [2,] "Juan"    "5569713258"
## [3,] "Pedro"   "5597134982"
## [4,] "Luisa"   "5593617426"
  1. Para verificar la longitud de un celular (aunque sería mas fácil con otra función). También para definir ciclos (for).
nums<-c('5664821795','5569713258','5597134982','5593617426')

strsplit(nums,'')[[1]]
##  [1] "5" "6" "6" "4" "8" "2" "1" "7" "9" "5"
valid<-c()
for (i in 1:length(nums)) {
  if(length(strsplit(nums,'')[[i]])==10){valid[i]=T}else{valid[i]=F}
}
valid
## [1] TRUE TRUE TRUE TRUE

nchar

Esta función devuelve el número de carácteres en una variable.

  1. Una forma más sencilla de validar el número de celular
nums<-c('5664821795','5569713258','5597134982','5593617426')

nums[nchar(nums)==10]
## [1] "5664821795" "5569713258" "5597134982" "5593617426"
  1. Para encontrar el dato más largo.
datos<-c('Eduardo','Juan','Pedro','Luisa','Francisco','Pedro','Paulina','Ronaldinho')

datos[nchar(datos)==max(nchar(datos))]
## [1] "Ronaldinho"
  1. Un ejemplo más completo de su uso está en el ejercicio final.

unique

Devuelve los datos que no se repiten en un vector.

  1. Para verificar que no hay datos repetidos.
vector1<-c('5664821795','5569713258','5597134982','5593617426')
vector2<-c('5664821795','5569713258','5597134982','5593617426','5569713258')

length(unique(vector1))==length(vector1)
## [1] TRUE
length(unique(vector1))==length(vector2)
## [1] FALSE
  1. Para verificar longitud válida de un dato.
nums<-c('5664821795','5569713258','5597134982','5593617426')

unique(nchar(nums))
## [1] 10
  1. Para definir el soporte (cto. de valores que puede tomar) una variable discreta.
datos<-rbinom(1000,10,.5)

unique(sort(datos))
##  [1] 0 1 2 3 4 5 6 7 8 9

Ejercicio

Contar todas las letras a (incluye mayúscula, minúscula y con acento).

“El auto más rápido del mundo es el Bugatti Chiron Super Sport 300, alcanza una velocidad de 304 mph (489.24 km/h) –limitada–, su precio de adquisición es de 2,400,000 EUR. Los velocistas lo describen como ‘It’s pretty cool’.”

En primer lugar homologo el texto a minúsculas.

  texto_Na<-tolower(texto)
  texto_Na
## [1] "el auto más rápido del mundo es el bugatti chiron super sport 300, alcanza una velocidad de 304 mph (489.24 km/h) –limitada–, su precio de adquisición es de 2,400,000 eur. los velocistas lo describen como 'it’s pretty cool'."

En seguida sustituyo las a por vacíos ’’.

texto_Na<-gsub('a','',texto_Na)
texto_Na
## [1] "el uto más rápido del mundo es el bugtti chiron super sport 300, lcnz un velocidd de 304 mph (489.24 km/h) –limitd–, su precio de dquisición es de 2,400,000 eur. los velocists lo describen como 'it’s pretty cool'."

Para luego sustituir las á, igual por vacíos ’’.

texto_Na<-gsub('á','',texto_Na)
texto_Na
## [1] "el uto ms rpido del mundo es el bugtti chiron super sport 300, lcnz un velocidd de 304 mph (489.24 km/h) –limitd–, su precio de dquisición es de 2,400,000 eur. los velocists lo describen como 'it’s pretty cool'."

Finalmente gracias a la función nchar() obtengo el número de letras a de la diferencia entre el vector completo y el que no las tiene.

nchar(texto)-nchar(texto_Na)
## [1] 13