Wie kann ich die letzten n Zeichen aus einer Zeichenfolge in R abrufen? Gibt es eine Funktion wie SQL RIGHT?
271
Mir ist nichts in Basis R bekannt, aber es ist einfach, eine Funktion zu erstellen, um dies mit substr
und zu tun 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"
Dies ist vektorisiert, wie @mdsumner betont. Erwägen:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
nchar(x)
doppelten Aufruf zu vermeiden, indem Sie ihn einer lokalen Variablen zuweisen?Wenn es Ihnen nichts ausmacht, das
stringr
Paket zu verwenden,str_sub
ist dies praktisch, da Sie Negative verwenden können, um rückwärts zu zählen:Oder, wie Max in einem Kommentar zu dieser Antwort betont,
quelle
stringr
es wurdestringi
als Backend neu erstellt, sollte also jetzt mit NAs usw. funktionieren.Verwenden Sie die
stri_sub
Funktion aus demstringi
Paket. Verwenden Sie negative Zahlen, um die Teilzeichenfolge vom Ende zu erhalten. Schauen Sie sich unten die Beispiele an:Sie können dieses Paket von github installieren: https://github.com/Rexamine/stringi
Es ist jetzt auf CRAN verfügbar. Geben Sie einfach ein
um dieses Paket zu installieren.
quelle
quelle
Eine andere ziemlich einfache Möglichkeit ist die Verwendung regulärer Ausdrücke und
sub
:Also, "alles loswerden, gefolgt von einem Charakter". Fügen Sie der Lookahead-Behauptung jedoch so viele Punkte hinzu, um am Ende mehr Zeichen zu erhalten:
wo
.{2}
bedeutet..
, oder "zwei beliebige Zeichen", was bedeutet "alles loswerden, gefolgt von zwei Zeichen".für drei Zeichen usw. Sie können die Anzahl der Zeichen festlegen, die mit einer Variablen erfasst werden sollen, aber Sie müssen
paste
den Variablenwert in die Zeichenfolge für reguläre Ausdrücke eingeben:quelle
regmatches(x, regexpr(".{6}$", x))
UPDATE : Wie von mdsumner festgestellt , ist der ursprüngliche Code bereits vektorisiert, da substr ist. Hätte vorsichtiger sein sollen.
Und wenn Sie eine vektorisierte Version möchten (basierend auf Andries Code)
Beachten Sie, dass ich geändert
(nchar(x)-n)
habe(nchar(x)-n+1)
, umn
Zeichen zu erhalten .quelle
(nchar(x)-n)
zu(nchar(x)-n+1)
"Eine einfache Basis-R-Lösung mit der
substring()
Funktion (wer wusste, dass diese Funktion überhaupt existiert?):Dies nutzt den Vorteil, im Grunde genommen
substr()
darunter zu sein, hat aber einen Standardendwert von 1.000.000.Beispiele:
quelle
Eine Alternative dazu
substr
besteht darin, die Zeichenfolge in eine Liste einzelner Zeichen aufzuteilen und Folgendes zu verarbeiten:quelle
Ich benutze
substr
auch, aber auf eine andere Art und Weise. Ich möchte die letzten 6 Zeichen von "Gib mir dein Essen" extrahieren. Hier sind die Schritte:(1) Teilen Sie die Zeichen
(2) Extrahieren Sie die letzten 6 Zeichen
Ausgabe:
Auf jedes der Zeichen kann zugegriffen werden
splits[[1]][x]
, wobei x 1 bis 6 ist.quelle
Jemand zuvor verwendet eine ähnliche Lösung wie ich, aber ich finde es einfacher, wie folgt zu denken:
Dadurch werden die letzten Zeichen wie gewünscht angezeigt.
quelle
Versuche dies:
Es sollte geben:
quelle
Ich habe den folgenden Code verwendet, um das letzte Zeichen einer Zeichenfolge abzurufen.
Sie können mit dem nchar (stringOfInterest) spielen, um herauszufinden, wie Sie die letzten Zeichen erhalten.
quelle
Eine kleine Modifikation der @ Andrea-Lösung bietet auch die Ergänzung:
Das war es, wonach ich gesucht habe. Und es lädt zur linken Seite ein:
quelle
Nur für den Fall, dass eine Reihe von Zeichen ausgewählt werden müssen:
quelle