¿Cómo puedo obtener los últimos n caracteres de una cadena en R? ¿Hay una función como la DERECHA de SQL?
271
No conozco nada en la base R, pero es sencillo hacer una función para hacer esto usando substr
y nchar
:
x <- "some text in a string"
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
substrRight(x, 6)
[1] "string"
substrRight(x, 8)
[1] "a string"
Esto está vectorizado, como señala @mdsumner. Considerar:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
nchar(x)
dos veces asignándolo a una variable local?Si no te importa usar el
stringr
paquete,str_sub
es útil porque puedes usar negativos para contar hacia atrás:O, como Max señala en un comentario a esta respuesta,
fuente
stringr
había rehecho utilizandostringi
como back-end, por lo que debería funcionar con NA, etc.Usar la
stri_sub
función delstringi
paquete. Para obtener una subcadena desde el final, use números negativos. Mira a continuación los ejemplos:Puede instalar este paquete desde github: https://github.com/Rexamine/stringi
Ya está disponible en CRAN, simplemente escriba
para instalar este paquete
fuente
fuente
Otra forma razonablemente sencilla es usar expresiones regulares y
sub
:Entonces, "deshazte de todo seguido de un personaje". Para capturar más caracteres al final, agregue cuantos puntos haya en la afirmación anticipada:
donde
.{2}
significa..
, o "cualquier dos caracteres", lo que significa "deshacerse de todo seguido de dos caracteres".para tres caracteres, etc. Puede establecer el número de caracteres para capturar con una variable, pero deberá
paste
ingresar el valor de la variable en la cadena de expresión regular:fuente
regmatches(x, regexpr(".{6}$", x))
ACTUALIZACIÓN : como lo señaló mdsumner , el código original ya está vectorizado porque substr lo es. Debería haber sido más cuidadoso.
Y si quieres una versión vectorizada (basada en el código de Andrie )
Tenga en cuenta que he cambiado
(nchar(x)-n)
a(nchar(x)-n+1)
para obtenern
personajes.fuente
(nchar(x)-n)
a(nchar(x)-n+1)
"Una solución base R simple que usa la
substring()
función (¿quién sabía que esta función existía?):Esto aprovecha básicamente ser
substr()
debajo pero tiene un valor final predeterminado de 1,000,000.Ejemplos:
fuente
Una alternativa
substr
es dividir la cadena en una lista de caracteres individuales y procesar eso:fuente
Yo
substr
también lo uso , pero de una manera diferente. Quiero extraer los últimos 6 caracteres de "Dame tu comida". Aquí están los pasos:(1) Divide los personajes
(2) Extraiga los últimos 6 caracteres.
Salida:
Se puede acceder a cada uno de los caracteres
splits[[1]][x]
, donde x es de 1 a 6.fuente
alguien antes usa una solución similar a la mía, pero me resulta más fácil pensar de la siguiente manera:
Esto traerá los últimos caracteres como se desee.
fuente
Prueba esto:
Debería dar:
fuente
Usé el siguiente código para obtener el último carácter de una cadena.
Puedes jugar con el nchar (stringOfInterest) para descubrir cómo obtener los últimos caracteres.
fuente
Una pequeña modificación en la solución @Andrie también da el complemento:
Eso era lo que estaba buscando. E invita al lado izquierdo:
fuente
Por si acaso se necesita elegir un rango de caracteres:
fuente