Comment puis-je obtenir les n derniers caractères d'une chaîne dans R? Existe-t-il une fonction comme SQL's RIGHT?
271
Je ne suis au courant de rien dans la base R, mais il est simple de créer une fonction pour ce faire en utilisant substr
et 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"
Ceci est vectorisé, comme le souligne @mdsumner. Considérer:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
nchar(x)
deux fois en l'affectant à une variable locale?Si cela ne vous dérange pas d'utiliser le
stringr
package,str_sub
c'est pratique car vous pouvez utiliser des négatifs pour compter à rebours:Ou, comme Max le fait remarquer dans un commentaire à cette réponse,
la source
stringr
a été refait en utilisantstringi
un backend, donc devrait fonctionner avec les NA, etc. maintenant.Utilisez la
stri_sub
fonction dustringi
package. Pour obtenir la sous-chaîne de la fin, utilisez des nombres négatifs. Regardez ci-dessous pour les exemples:Vous pouvez installer ce paquet depuis github: https://github.com/Rexamine/stringi
Il est disponible sur CRAN maintenant, tapez simplement
pour installer ce package.
la source
la source
Une autre façon assez simple consiste à utiliser des expressions régulières et
sub
:Donc, "débarrassez-vous de tout suivi d'un seul personnage". Pour saisir plus de caractères à la fin, ajoutez autant de points dans l'assertion lookahead:
où
.{2}
signifie..
, ou "deux caractères quelconques", ce qui signifie "se débarrasser de tout suivi de deux caractères".pour trois caractères, etc. Vous pouvez définir le nombre de caractères à saisir avec une variable, mais vous devrez définir la
paste
valeur de la variable dans la chaîne d'expression régulière:la source
regmatches(x, regexpr(".{6}$", x))
MISE À JOUR : comme indiqué par mdsumner , le code d'origine est déjà vectorisé parce que substr l'est. Aurait dû être plus prudent.
Et si vous voulez une version vectorisée (basée sur le code d' Andrie )
Notez que je l' ai changé
(nchar(x)-n)
pour(nchar(x)-n+1)
obtenir desn
caractères.la source
(nchar(x)-n)
à(nchar(x)-n+1)
"Une solution de base R simple utilisant la
substring()
fonction (qui savait que cette fonction existait même?):Cela profite essentiellement d'être en
substr()
dessous mais a une valeur finale par défaut de 1 000 000.Exemples:
la source
Une alternative à
substr
est de diviser la chaîne en une liste de caractères uniques et de traiter ce qui:la source
J'utilise
substr
aussi, mais d'une manière différente. Je veux extraire les 6 derniers caractères de "Donnez-moi votre nourriture." Voici les étapes:(1) Divisez les caractères
(2) Extraire les 6 derniers caractères
Production:
Chacun des personnages est accessible par
splits[[1]][x]
, où x est compris entre 1 et 6.la source
quelqu'un utilise avant une solution similaire à la mienne, mais je trouve plus facile de penser comme ci-dessous:
Cela apportera les derniers caractères comme vous le souhaitez.
la source
Essaye ça:
Il devrait donner:
la source
J'ai utilisé le code suivant pour obtenir le dernier caractère d'une chaîne.
Vous pouvez jouer avec le nchar (stringOfInterest) pour comprendre comment obtenir les derniers caractères.
la source
Une petite modification sur la solution @Andrie donne également le complément:
Voilà ce que je cherchais. Et il invite sur le côté gauche:
la source
Juste au cas où une gamme de caractères doit être choisie:
la source