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?

375voto

Andrie Punkte 169813

Mir ist nichts in Base R bekannt, aber es ist einfach, eine Funktion zu erstellen, die dies mit 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"

Dies ist vektorisiert, wie @mdsumner anmerkt. Bedenken Sie:

x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"

310voto

Xu Wang Punkte 9779

Wenn es Ihnen nichts ausmacht, die stringr Paket, str_sub ist praktisch, weil man mit Negativen rückwärts zählen kann:

x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"

Oder, wie Max in einem Kommentar zu dieser Antwort anmerkt,

str_sub(x, start= -6)
[1] "string"

60voto

bartektartanus Punkte 14061

Verwenden Sie stri_sub Funktion von stringi Paket. Um eine Teilzeichenkette vom Ende her zu erhalten, verwenden Sie negative Zahlen. Siehe unten die Beispiele:

stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"

Sie können dieses Paket von Github installieren: https://github.com/Rexamine/stringi

Es ist jetzt auf CRAN verfügbar, geben Sie einfach

install.packages("stringi")

um dieses Paket zu installieren.

22voto

Andrew Punkte 7509
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)

> [1] "example"
>

19voto

dsb Punkte 475

Eine andere, recht unkomplizierte Möglichkeit ist die Verwendung von regulären Ausdrücken und sub :

sub('.*(?=.$)', '', string, perl=T)

Also, "alles loswerden, was von einem Zeichen gefolgt wird". Um mehr Zeichen vom Ende zu entfernen, fügen Sie so viele Punkte wie möglich in die Vorausschau-Behauptung ein:

sub('.*(?=.{2}$)', '', string, perl=T)

donde .{2} bedeutet .. oder "zwei beliebige Zeichen", was soviel bedeutet wie "alles loswerden, was von zwei Zeichen gefolgt wird".

sub('.*(?=.{3}$)', '', string, perl=T)

für drei Zeichen, usw. Sie können die Anzahl der zu erfassenden Zeichen mit einer Variablen festlegen, aber Sie müssen paste den Variablenwert in die Zeichenkette des regulären Ausdrucks:

n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)

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