2016-08-01 18 views
-1

Ich möchte diese Zeichenfolge in mehrere Teilstrings aufgeteilt:Wie verwendet man str_split() in R?

BAA33520.2 |/Gen = "vpf402"/product = "Vpf402" | GI: 8272373 | AB012574 | beitreten {7347: 7965, 0 : 591}

Der Separator ist | (ascii 124).
Es funktioniert mit allen anderen Trennzeichen, aber nicht mit diesem.

+0

PS: Die Split-Funktion spaltet diese Zeichenfolge überhaupt nicht, wenn | wird als Trennzeichen verwendet. – CLM

+0

Was hast du versucht, das ist fehlgeschlagen? – hrbrmstr

+1

Hast du versucht es zu entkommen? zB, \\ | ' – aosmith

Antwort

5

?regex

Zwei reguläre Ausdrücke können | durch den Infixoperator verbunden werden; Der resultierende reguläre Ausdruck entspricht einer Zeichenfolge, die mit einem Unterausdruck übereinstimmt. Beispiel: abba|cde entspricht entweder der Zeichenfolge abba oder der Zeichenfolge cde. Beachten Sie, dass Alternation nicht innerhalb von Zeichenklassen funktioniert, wobei | seine wörtliche Bedeutung hat.

Die grundlegenden Bausteine ​​sind die regulären Ausdrücke, die einem einzelnen Zeichen entsprechen. Die meisten Zeichen, einschließlich aller Buchstaben und Ziffern, sind reguläre Ausdrücke, die sich selbst entsprechen. Jedes Metazeichen mit spezieller Bedeutung kann durch vorangestelltes Backslash zitiert werden. Die Metazeichen in erweiterten regulären Ausdrücken sind . \ | () [ {^$ * + ?, aber beachten Sie, dass diese abhängig vom Kontext eine besondere Bedeutung haben.

So:

stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}', "\\|") 

Wie @Frank erwähnt, können Sie dies, indem Sie die fixed=TRUE in base::strsplit() tun:

strsplit('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{‌​7347:7965, 0:591}',"|", fixed=TRUE) 

Sie können aber auch dies mit stringr::str_split() durch die Dekoration der reguläre Ausdruck für das Trennzeichen:

Übrigens
stringr::str_split('BAA33520.2|/gene="vpf402",/product="Vpf402"|GI:8272373|AB012574|join{7347:7965, 0:591}', 
        regex("|", literal=TRUE)) 

ist stringr so ziemlich nur leicht freundlicher Wrapper stringi Funktionen an dieser Stelle und ich empfehle das Studium der stringi Paket, wie es einige wunderbare Edelsteine ​​außerhalb der Zeichenfolge spiltting enthält.

+1

In der Basis R können Sie auch fixed = TRUE setzen, um diesen' strsplit ('BAA33520.2 |/gen = "vpf402",/product = "Vpf402" | GI: 8272373 | AB012574) zu umgehen | join {7347: 7965, 0: 591} ', "|", fest = TRUE) '. Scheint, dass diese Option nicht in stringr enthalten war. – Frank

+0

Liebe alle, vielen Dank für Ihre Anregungen, sie haben wunderbar funktioniert! – CLM

+0

+1. Wenn dies der Fall ist, ist es üblich, das Antwortzeichen anzukreuzen, damit zukünftige Suchende eine Antwort wissen, um das Problem zu lösen – hrbrmstr