376 Stimmen

Extrahieren der letzten n Zeichen aus einer Zeichenkette in R

Wie kann ich die letzten n Zeichen einer Zeichenkette in R ermitteln? Gibt es eine Funktion wie die von SQL RIGHT?

13voto

Andrew Haynes Punkte 2524

Eine einfache R-Basislösung unter Verwendung der substring() Funktion (wer wusste, dass diese Funktion überhaupt existiert?):

RIGHT = function(x,n){
  substring(x,nchar(x)-n+1)
}

Dies hat den Vorteil, dass es grundsätzlich substr() darunter, hat aber einen Standardendwert von 1.000.000.

Beispiele:

> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"

12voto

Laurent Punkte 543

UPDATE wie festgestellt von mdsumner ist der ursprüngliche Code bereits vektorisiert, da substr. Ich hätte vorsichtiger sein müssen.

Und wenn Sie eine vektorisierte Version wünschen (basierend auf Andrie 's Code)

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"

Beachten Sie, dass ich Folgendes geändert habe (nchar(x)-n) a (nchar(x)-n+1) zu erhalten n Zeichen.

12voto

lukasz Punkte 81

Versuchen Sie dies:

x <- "some text in a string"
n <- 5
substr(x, nchar(x)-n, nchar(x))

Das sollte es geben:

[1] "string"

6voto

mdsumner Punkte 28258

Eine Alternative zu substr ist es, die Zeichenkette in eine Liste einzelner Zeichen zu zerlegen und diese zu verarbeiten:

N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)

4voto

remykarem Punkte 1870

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) Aufteilung der Zeichen

splits <- strsplit("Give me your food.", split = "")

(2) Extrahieren Sie die letzten 6 Zeichen

tail(splits[[1]], n=6)

Salida:

[1] " " "f" "o" "o" "d" "."

Auf jedes der Zeichen kann zugegriffen werden durch splits[[1]][x] , wobei x 1 bis 6 ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X