HOWTO · R
Eliminar el primer carácter de una cadena en R
Este artículo muestra tres técnicas para eliminar el primer carácter de una cadena o un vector de cadenas. Demuestra el uso de la función substr, la función sub con una expresión regular y la función str_sub del paquete stringr.
En esta página
Para eliminar el primer carácter de una cadena en R, conserva la subcadena desde la posición 2 hasta el final. Para un vector de caracteres, usa substr() con nchar() para calcular la posición final de cada elemento, o usa sub() con una cadena de reemplazo vacía. Los ejemplos siguientes usan R base; str_sub() del paquete opcional stringr es otra opción concisa.
Eliminar el primer carácter de una cadena en R
R usa posiciones que empiezan en 1, y las posiciones finales de las subcadenas se incluyen. Por tanto, la posición 2 corresponde al segundo carácter. Si un vector contiene cadenas de distintas longitudes, calcula la posición final de cada valor en vez de usar un único número fijo.
Ejecuta este ejemplo; el código y las etiquetas de salida visibles se mantienen en inglés:
word <- "dictionary"
substr(word, 2, nchar(word))
Usar substr() con nchar()
substr(x, start, stop) extrae los caracteres desde start hasta stop, ambos incluidos. Como nchar() devuelve la longitud de cada cadena, substr() y nchar() funcionan juntos con un vector, sin necesidad de un bucle. Es una opción útil de R base cuando la entrada puede contener cadenas de distintas longitudes.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
words <- c("dictionary", "thesaurus", "diary")
substr(words, 2, nchar(words))
Aquí, nchar(words) produce una posición final para cada elemento. Los resultados son "ictionary", "hesaurus" y "iary", respectivamente. Para una única cadena de longitud conocida, puedes indicar su longitud directamente; calcularla con nchar() hace que la expresión sea más fácil de reutilizar.
Usar sub() con una expresión regular
sub(pattern, replacement, x) reemplaza la primera coincidencia de cada cadena. En el modo de expresión regular predeterminado de R, un punto (.) coincide con un carácter que no sea un salto de línea, y una cadena de reemplazo vacía ("") elimina esa coincidencia. Así, sub(".", "", x) elimina el primer carácter si no es un salto de línea. Si la cadena podría empezar con un salto de línea, usa substr(x, 2, nchar(x)), como se explicó antes; este método elimina ese primer carácter aunque sea un salto de línea.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
words <- c("dictionary", "thesaurus", "diary")
sub(".", "", words)
Usa gsub() con cuidado: reemplaza todas las coincidencias. Por ejemplo, un punto sin anclar con gsub() coincide con cada carácter que no sea un salto de línea, no solo con el primero. El patrón anclado "^." limita la coincidencia a un carácter que no sea un salto de línea al principio, por lo que gsub("^.", "", x) también deja intacto un salto de línea inicial. Si la cadena puede empezar con un salto de línea, usa el método substr(). Para eliminar el primer carácter cuando no es un salto de línea, sub() expresa directamente la operación de reemplazar una sola coincidencia.
Usar str_sub() de stringr
El paquete stringr incluye str_sub(), que acepta una cadena o un vector. Instala el paquete una sola vez con install.packages("stringr") y luego cárgalo en cada sesión de R con library(stringr). Cuando la posición final es -1, str_sub() cuenta hacia atrás desde el final. Para un valor, usa str_sub("dictionary", 2, -1); para un vector, usa str_sub(words, 2, -1). Cada llamada conserva el texto desde el segundo carácter hasta el último, y la llamada con el vector procesa cada elemento como en los ejemplos de R base.
Elige esta opción si tu proyecto ya usa stringr o prefieres su indexación negativa. Si quieres evitar añadir un paquete, usa substr(words, 2, nchar(words)) o sub(".", "", words) de R base.
Elegir un método
Usa substr() con nchar() cuando resulte más claro indicar explícitamente las posiciones inicial y final, sobre todo si el vector contiene cadenas de distintas longitudes. Usa sub() cuando quieras eliminar el primer carácter reemplazando su primera coincidencia con una cadena vacía. Elige str_sub() si tu proyecto ya incluye stringr y las posiciones finales negativas hacen que la expresión sea más fácil de leer. Los tres métodos sirven tanto para una cadena como para cada elemento de un vector de caracteres.