Extrae los primeros (o últimos) n caracteres de una cadena

83

Quiero extraer los primeros (o últimos) n caracteres de una cadena. Este sería el equivalente a Excel LEFT()y RIGHT(). Un pequeño ejemplo:

# create a string
a <- paste('left', 'right', sep = '')
a
# [1] "leftright"

Me gustaría producir buna cadena que sea igual a las primeras 4 letras de a:

b
# [1] "left"

¿Qué tengo que hacer?

Lisa Ann
fuente

Respuestas:

89

Ver ?substr

R> substr(a, 1, 4)
[1] "left"
rcs
fuente
Recomiendo echar un vistazo a la respuesta de @juba a continuación. Él proporciona una stringrsolución.
Jochem
57

El stringrpaquete proporciona la str_subfunción, que es un poco más fácil de usar substr, especialmente si desea extraer las partes correctas de su cadena:

R> str_sub("leftright",1,4)
[1] "left"
R> str_sub("leftright",-5,-1)
[1] "right"
juba
fuente
3
Gracias por tu sugerencia, juba; por cierto, creo que aceptaré la respuesta de rcs porque se trata de la base R:)
Lisa Ann
4
Saber la base R es bueno, pero si se trata de funciones de cadena, su vida será más fácil si solo usa el stringr como lo menciona @juba
Dieter Menne
1
Estoy de acuerdo con Dieter. Aprender stringrte ahorrará casi tanta molestia como lubridate.
Andrew Brēza
25

Puede obtener fácilmente las funciones Derecha () e Izquierda () a partir del paquete Rbase:

  • función correcta

    right = function (string, char) {
        substr(string,nchar(string)-(char-1),nchar(string))
    }
    
  • función izquierda

    left = function (string,char) {
        substr(string,1,char)
    }
    

puede usar esas dos funciones personalizadas exactamente como left () y right () en Excel. Espero que te resulte útil

Andrea Cirillo
fuente
6

Hágalo simple y use las funciones básicas de R:

# To get the LEFT part:
> substr(a, 1, 4)
[1] "left"
> 
# To get the MIDDLE part:
> substr(a, 3, 7)
[1] "ftrig"
> 
# To get the RIGHT part:
> substr(a, 5, 10)
[1] "right"

La substr()función te dice dónde empezar y pararsubstr(x, start, stop)

Marcos RF
fuente
2

Si viene desde Microsoft Excel, las siguientes funciones serán similares a LEFT(), RIGHT()y MID()funciones.


# This counts from the left and then extract n characters

str_left <- function(string, n) {
  substr(string, 1, n)
}



# This counts from the right and then extract n characters

str_right <- function(string, n) {
  substr(string, nchar(string) - (n - 1), nchar(string))
}


# This extract characters from the middle

str_mid <- function(string, from = 2, to = 5){
  
  substr(string, from, to)
  }

Ejemplos:

x <- "some text in a string"
str_left(x, 4)
[1] "some"

str_right(x, 6)
[1] "string"

str_mid(x, 6, 9)
[1] "text"

gbganalista
fuente