Hier sind einige Möglichkeiten:
1) sub
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) read.table
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) Teilzeichenfolge
Dies setzt voraus, dass der zweite Teil immer mit dem 4. Zeichen beginnt (was im Beispiel in der Frage der Fall ist):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) Teilzeichenfolge / Regex
Wenn sich der Doppelpunkt nicht immer an einer bekannten Position befindet, können wir (4) ändern, indem wir danach suchen:
substring(string, regexpr(":", string) + 1)
5) Strapplyc
strapplyc
Gibt den in Klammern gesetzten Teil zurück:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Dieser funktioniert nur, wenn die Teilzeichenfolgen vor dem Doppelpunkt eindeutig sind (wie im Beispiel in der Frage angegeben). Außerdem muss das Trennzeichen ein Doppelpunkt sein (was in Frage kommt). Wenn ein anderes Trennzeichen verwendet würde, könnten wir sub
es zuerst durch einen Doppelpunkt ersetzen. Zum Beispiel, wenn das Trennzeichen _
dann wärestring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) trennen
7a) Mit tidyr::separate
erstellen wir einen Datenrahmen mit zwei Spalten, eine für den Teil vor dem Doppelpunkt und eine für nach dem Doppelpunkt, und extrahieren dann den letzteren.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) Alternativ separate
kann verwendet werden, um nur die post
Spalte und dann unlist
und unname
den resultierenden Datenrahmen zu erstellen :
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) trimws Wir können trimws
Wortzeichen von links abschneiden und dann erneut verwenden, um den Doppelpunkt zu trimmen.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Hinweis
Die Eingabe string
wird angenommen als:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
als Trennzeichen diente, und machte zwei separate Variablen für das Präfix und das Suffix basierend auf der Antwort von @Grothendieck:prefix <- sub("_.*", "", variable)
undsuffix <- sub(".*_", "", variable)
Zum Beispiel mit
gsub
odersub
quelle
Hier ist eine weitere einfache Antwort
quelle
Spät zur Party, aber für die Nachwelt bietet das stringr- Paket (Teil der beliebten "tidyverse" -Paket-Suite) jetzt Funktionen mit harmonisierten Signaturen für die String-Handhabung:
quelle
Dies sollte tun:
gibt
quelle
Wenn Sie verwenden
data.table
danntstrsplit()
ist eine natürliche Wahl:quelle
Das unglue- Paket bietet eine Alternative. Für einfache Fälle sind keine Kenntnisse über reguläre Ausdrücke erforderlich. Hier würden wir Folgendes tun:
Erstellt am 06.11.2019 durch das reprex-Paket (v0.3.0)
Weitere Informationen: https://github.com/moodymudskipper/unglue/blob/master/README.md
quelle