Wie entferne ich einen Teil einer Zeichenfolge? Zum Beispiel in ATGAS_1121
Ich möchte alles vorher entfernen _
.
88
Verwenden Sie reguläre Ausdrücke. In diesem Fall können Sie Folgendes verwenden gsub
:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
Dieser reguläre Ausdruck entspricht dem Anfang der Zeichenfolge (^), einem beliebigen Zeichen (.), Das null oder mehrmals wiederholt wird (*), und einem Unterstrich (_). Das ? macht das Match "faul", so dass nur Matches bis zum ersten Unterstrich reichen. Dieses Match wird nur durch einen Unterstrich ersetzt. Sehen Sie ?regex
für weitere Informationen und Referenzen
gsub("^.*_","_","ATGAS_1121_xxx")
. Jetzt behoben.Sie können hierfür eine integrierte Funktion verwenden, strsplit :
strsplit gibt beide Teile des Strings, die im split- Parameter analysiert wurden, als Liste zurück . Das ist wahrscheinlich nicht das, was Sie wollen. Schließen Sie den Aufruf in die Liste ein und indizieren Sie das Array so, dass nur das zweite der beiden Elemente im Vektor zurückgegeben wird.
Schließlich sollte der feste Parameter auf TRUE gesetzt werden, um anzuzeigen, dass der Split-Parameter kein regulärer Ausdruck, sondern ein Literal-Matching-Zeichen ist.
quelle
Wenn Sie eine Tidyverse-Person sind, ist hier die Stringr- Lösung:
quelle
Hier ist die
strsplit
Lösung, wenns
es sich um einen Vektor handelt:quelle
Hier die
strsplit
Lösung für einen Datenrahmen mitdplyr
Paketquelle
Die vielleicht intuitivste Lösung besteht wahrscheinlich darin, die
stringr
Funktion zu verwenden,str_remove
die noch einfacher ist, alsstr_replace
da sie nur 1 Argument anstelle von 2 hat.Der einzige schwierige Teil in Ihrem Beispiel ist, dass Sie den Unterstrich beibehalten möchten, aber es ist möglich: Sie müssen mit dem regulären Ausdruck übereinstimmen, bis das angegebene Zeichenfolgenmuster gefunden wird
(?=pattern)
.Siehe Beispiel:
quelle