¿Cómo puedo obtener los últimos n caracteres de una cadena en R? ¿Existe una función como SQL's RIGHT?Extrayendo los últimos n caracteres de una cadena en R
Respuesta
no estoy consciente de nada en la base de R, pero es recta hacia adelante para hacer una función para hacer esto utilizando 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 es vectorizado, como puntos @mdsumner fuera. Considere lo siguiente:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
ACTUALIZACIÓN: como señaló mdsumner, el código original ya está vectorizada porque es substr. Debería haber sido más cuidadoso.
Y si quieres una versión vectorizada (basado en el código Andrie 's)
substrRight <- function(x, n){
sapply(x, function(xx)
substr(xx, (nchar(xx)-n+1), nchar(xx))
)
}
> substrRight(c("12345","ABCDE"),2)
12345 ABCDE
"45" "DE"
Tenga en cuenta que he cambiado (nchar(x)-n)
a (nchar(x)-n+1)
para obtener n
caracteres.
Creo que quieres decir "' (nchar (x) -n) 'a' (nchar (x) -n + 1) '" –
Andrie's ya está vectorizado. – mdsumner
sapply! = Vectorizado –
Si no les importa usar el paquete stringr
, str_sub
es útil porque se puede utilizar negativos a contar hacia atrás:
x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"
O, como señala Max en un comentario a esta respuesta,
str_sub(x, start= -6)
[1] "string"
también, str_sub (x, start = -n) obtiene n últimos caracteres. – Max
stringr no funciona bien con el valor de NA y toda la codificación. Recomiendo encarecidamente el paquete de stringi :) – bartektartanus
Creo que 'stringr' se ha rehecho usando' stringi' como back-end, por lo que debería funcionar con NAs, etc. ahora. –
una alternativa a substr
es dividir la cadena en una lista de caracteres individuales y proceso que:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
Detecto un sistema.Time() Battle brewing :-) –
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
Esta es la mejor respuesta que no implica el uso de ningún paquete – prab4th
Use stri_sub
function from stringi
package. Para obtener subcadena desde el final, use números negativos. vistazo a continuación para los ejemplos:
stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
Puede instalar este paquete desde github: https://github.com/Rexamine/stringi
Está disponible en CRAN ahora, simplemente escriba
install.packages("stringi")
para instalar este paquete.
Otra forma razonablemente sencilla es utilizar expresiones regulares y sub
:
sub('.*(?=.$)', '', string, perl=T)
Así, "deshacerse de todo seguido de un carácter". Para hacerse con más caracteres fuera de la final, sin embargo añadir muchos puntos en la afirmación de búsqueda hacia delante:
sub('.*(?=.{2}$)', '', string, perl=T)
donde .{2}
significa ..
, o "dos caracteres", por lo que significa "deshacerse de todo seguido de dos caracteres".
sub('.*(?=.{3}$)', '', string, perl=T)
de tres caracteres, etc Usted puede ajustar el número de caracteres para agarrar con una variable, sino que tendrá que paste
el valor de la variable en la cadena de expresión regular:
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
Para evitar todos los look-aheads, etc., podría hacer 'regmatches (x, regexpr (". {6} $ ", x))' – thelatemail
I use substr
también, pero de una manera diferente. Quiero extraer los últimos 6 caracteres de "Dame tu comida". Estos son los pasos:
(1) Dividir los personajes
splits <- strsplit("Give me your food.", split = "")
(2) Extraer los últimos 6 caracteres
tail(splits[[1]], n=6)
Salida:
[1] " " "f" "o" "o" "d" "."
Cada uno de los caracteres se puede acceder por splits[[1]][x]
, donde x es 1 a 6.
una pequeña modificación en la solución @Andrie da también el complemento:
substrR <- function(x, n) {
if(n > 0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
}
x <- "moSvmC20F.5.rda"
substrR(x,-4)
[1] "moSvmC20F.5"
Eso era lo que estaba buscando. E invita a la izquierda:
substrL <- function(x, n){
if(n > 0) substr(x, 1, n) else substr(x, -n+1, nchar(x))
}
substrL(substrR(x,-4),-2)
[1] "SvmC20F.5"
alguien antes utiliza una solución similar a la mía, pero me resulta más fácil pensar de la siguiente manera:
> text<-"some text in a string" # we want to have only the last word "string" with 6 letter
> n<-5 #as the last character will be counted with nchar(), here we discount 1
> substr(x=text,start=nchar(text)-n,stop=nchar(text))
Esto traerá los últimos caracteres según se desee.
Utilicé el siguiente código para obtener el último carácter de una cadena.
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
Puede jugar con el nchar (stringOfInterest) para descubrir cómo obtener los últimos caracteres.
Una solución de base R simple usando la función substring()
(que sabía que existiera esta función?):
RIGHT = function(x,n){
substring(x,nchar(x)-n+1)
}
Esto toma ventaja de ser básicamente substr()
debajo, pero tiene un valor final predeterminado de 1.000.000.
Ejemplos:
> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"
- 1. Ruby, elimina los últimos N caracteres de una cadena?
- 2. ¿Cómo elimino los últimos n caracteres de una cadena?
- 3. Cómo comparar los últimos n caracteres de una cadena con otra cadena en C
- 4. Modificar los dos últimos caracteres de una cadena en Perl
- 5. Eliminación de los últimos caracteres en una cadena XSLT
- 6. cortar los últimos caracteres
- 7. Obtenga los últimos 5 caracteres en una cadena
- 8. R: eliminación de los últimos tres puntos de una cadena
- 9. Extracción de los dos últimos caracteres de una cadena numérica
- 10. Obtener los 4 últimos caracteres de una cadena
- 11. Python Eliminar los últimos 3 caracteres de una cadena
- 12. objetivo-c obtener los últimos 2 caracteres de una cadena?
- 13. cómo cortar los últimos n bytes de una cadena en corte de cadena bash?
- 14. ¿Cómo eliminar los dos primeros y los últimos dos caracteres en una cadena?
- 15. Eliminar los últimos dos caracteres de una columna en MySQL
- 16. Eliminar todos los caracteres especiales de una cadena en R?
- 17. Cómo obtener los últimos caracteres en una cadena en Java, independientemente del tamaño de cadena
- 18. xcode corta los últimos caracteres de la cadena
- 19. Devolviendo los primeros N caracteres de una cadena Unicode
- 20. Scala: obtenga los últimos dos caracteres de la cadena
- 21. últimos caracteres de una cadena K en Perl
- 22. Eliminar los últimos N caracteres del campo en una base de datos SQL Server
- 23. hacer una cadena de N caracteres
- 24. Recortar los últimos 4 caracteres de la cadena?
- 25. expresión regular: extraer los últimos 2 caracteres
- 26. ¿Cómo puedo obtener últimos caracteres de una cadena utilizando JavaScript
- 27. Eliminar los últimos caracteres de una cadena en C#. Una manera elegante?
- 28. Rieles 3- Recuperar los últimos N registros
- 29. ¿Cómo guardo una lista de solo los últimos n objetos?
- 30. Eliminar los últimos N bytes del archivo
y cuidado con AN ... – hadley
Uso paquete stringi. Funciona bien con NA y todas las codificaciones :) – bartektartanus
¿Sería más eficaz evitar llamar 'nchar (x)' dos veces asignándola a una variable local? –