Extraer y reemplazar subcadenas en R con substring() y substr()
Las funciones substring
y substr
de R permiten extraer o reemplazar partes de una cadena de texto. Sin embargo, los nombres de los argumentos difieren y mientras que substr
requiere tanto la posición inicial como la final de los elementos a extraer o reemplazar, substring
puede tomar sólo la primera posición y opcionalmente la última.
Sintaxis de las funciones substring
y substr
Estas funciones pueden extraer o reemplazar subcadenas y tienen una sintaxis similar, ya que ambas toman una cadena o vector de caracteres como entrada (x
o text
), el primer elemento a extraer o reemplazar (first
o start
) y el último elemento a extraer o reemplazar (stop
o last
), pero substring
proporciona un valor por defecto para last
, por lo que es un argumento opcional.
# Para extraer valores:
substr(x, start, stop)
substring(text, first, last = 1000000L)
# Para reemplazar valores:
substr(x, start, stop) <- value
substring(text, first, last = 1000000L) <- value
La salida de estas funciones también tiene diferencias dependiendo de la longitud del texto de entrada, ya que substr
devuelve un vector de caracteres de la longitud de x
pero substring
puede devolver más elementos dependiendo de la longitud de first
y last
.
Extraer subcadenas
Considera que tienes una cadena, por ejemplo "String"
y quieres obtener los tres primeros caracteres. Para ello puedes utilizar substr
o substring
especificando las posiciones inicial y final deseadas de la siguiente manera:
# Con substr()
substr("String", start = 1, stop = 3)
# Con substring()
substring("String", first = 1, last = 3)
"Str"
"Str"
Sin embargo, si quieres extraer valores desde cualquier posición hasta el último carácter tendrás que especificar stop
con substr
pero cuando utilices substring
no necesitarás especificar last
. Ten en cuenta que puedes utilizar la función nchar() para obtener la longitud de una cadena de texto en R.
# Con substr()
substr("String", start = 4, stop = nchar("String"))
# Con substring() (no es necesario especificar 'last')
substring("String", first = 4)
"ing"
"ing"
Como se ha indicado anteriormente, con substr
se requieren tanto start
como stop
, por lo que se producirá un error si no se especifica stop
.
substr("String", start = 4) # Error
Error in substr("String", start = 4) :
argument "stop" is missing, with no default
Extraer varias subcadenas a la vez
Otra diferencia entre substr
y substring
es que substr
devuelve un vector de la longitud de x
mientras que la salida de substring
depende de la longitud de las posiciones especificadas.
# Del primer al segundo elemento y del segundo al cuarto
substr(c("String", "String"), start = c(1, 2), stop = c(2, 4))
"St" "tri"
El siguiente ejemplo devuelve seis elementos con subcadenas con el primer elemento hasta el último, del segundo elemento al último y así sucesivamente.
# Del primero al último, del segundo al último, ..., del sexto al último
substring("String", first = 1:6)
"String" "tring" "ring" "ing" "ng" "g"
Reemplazar subcadenas
Las subcadenas también pueden sustituirse por cualquier otra cadena con el mismo número de caracteres de la subcadena original. Para ello, tendrás que almacenar tu cadena en una variable y luego asignar un valor a la subcadena.
El siguiente es un ejemplo utilizando substr
:
# String objetivo
string <- "String"
# Reemplazar del primer al segundo elemento con "AB"
substr(string, start = 1, stop = 2) <- "AB"
# Vemos el resultado
string
"ABring"
Lo mismo aplica para la función substring
:
# String objetivo
string <- "String"
# Reemplazar del tercer elemento al último con "1234"
substring(string, first = 3) <- "1234"
# Vemos el resultado
string
"St1234"
Ten en cuenta que si el número de caracteres de la sustitución es mayor que el número de caracteres de la subcadena, se ignorarán los caracteres restantes.
Si quieres eliminar una subcadena utilice las funciones gsub() o sub():
# String objetivo
string <- "String"
# Eliminamos "Str" de"String"
gsub("Str", "", string)
"ing"
R version 4.3.2 (2023-10-31 ucrt)