Como posso obter os últimos n caracteres de uma string em R? Existe uma função como o DIREITO do SQL?
271
Não estou ciente de nada na base R, mas é simples criar uma função para fazer isso usando substr
e 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"
Isso é vetorizado, como aponta @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)
duas vezes atribuindo-o a uma variável local?Se você não se importa em usar o
stringr
pacote,str_sub
é útil porque você pode usar negativos para contar de trás para frente:Ou, como Max aponta em um comentário para esta resposta,
fonte
stringr
tinha sido refeito usandostringi
como back-end, então deveria trabalhar com NAs etc. agora.Use a
stri_sub
função dostringi
pacote. Para obter a substring no final, use números negativos. Veja abaixo os exemplos:Você pode instalar este pacote no github: https://github.com/Rexamine/stringi
Já está disponível no CRAN, basta digitar
para instalar este pacote.
fonte
fonte
Outra maneira razoavelmente direta é usar expressões regulares e
sub
:Então, "livre-se de tudo seguido por um personagem". Para pegar mais caracteres no final, adicione muitos pontos na asserção lookahead:
onde
.{2}
significa..
, ou "quaisquer dois caracteres", o que significa "livrar-se de tudo seguido por dois caracteres".para três caracteres, etc. Você pode definir o número de caracteres a serem capturados com uma variável, mas precisará
paste
do valor da variável na cadeia de expressão regular:fonte
regmatches(x, regexpr(".{6}$", x))
UPDATE : como observado pelo mdsumner , o código original já está vetorizado porque substr é. Deveria ter sido mais cuidadoso.
E se você quiser uma versão vetorizada (com base no código de Andrie )
Note que eu mudei
(nchar(x)-n)
para(nchar(x)-n+1)
obtern
caracteres.fonte
(nchar(x)-n)
a(nchar(x)-n+1)
"Uma solução R simples de base usando a
substring()
função (quem sabia que essa função existia?):Isso tira vantagem de estar basicamente
substr()
embaixo, mas tem um valor final padrão de 1.000.000.Exemplos:
fonte
Uma alternativa
substr
é dividir a sequência em uma lista de caracteres únicos e processar que:fonte
Eu
substr
também uso , mas de uma maneira diferente. Quero extrair os últimos 6 caracteres de "Me dê sua comida". Aqui estão os passos:(1) Divida os caracteres
(2) Extraia os últimos 6 caracteres
Resultado:
Cada um dos caracteres pode ser acessado por
splits[[1]][x]
, onde x é 1 a 6.fonte
alguém antes usa uma solução semelhante à minha, mas acho mais fácil pensar no seguinte:
Isso trará os últimos caracteres conforme desejado.
fonte
Tente o seguinte:
Deveria:
fonte
Eu usei o código a seguir para obter o último caractere de uma string.
Você pode jogar com o nchar (stringOfInterest) para descobrir como obter os últimos caracteres.
fonte
Uma pequena modificação na solução @Andrie também oferece o complemento:
Era isso que eu estava procurando. E convida para o lado esquerdo:
fonte
Apenas no caso de ser necessário escolher um intervalo de caracteres:
fonte