wake-up-neo.com

extrahieren Sie einen Teilstring in R nach einem Muster

Angenommen, ich habe eine Liste mit Strings: string = c("G1:E001", "G2:E002", "G3:E003"). Jetzt hoffe ich, einen Vektor von Zeichenfolge zu erhalten, der nur die Teile nach dem Doppelpunkt ":" enthält, d. H. substring = c(E001,E002,E003). Gibt es eine bequeme Möglichkeit in R, dies zu tun? substr verwenden? Vielen Dank!

94
alittleboy

Hier sind einige Möglichkeiten:

1) Unter

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

Es wird davon ausgegangen, dass der zweite Teil immer mit dem vierten Zeichen beginnt (was im Beispiel in der Frage der Fall ist):

substring(string, 4)
## [1] "E001" "E002" "E003"

4a) Teilstring/Regex  

Wenn sich der Doppelpunkt nicht immer in einer bekannten Position befindet, können wir (4) modifizieren, indem Sie danach suchen:

substring(string, regexpr(":", string) + 1)

5) strapplyc

strapplyc gibt den eingeklammerten Teil zurück:

library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"

6) read.dcf  

Diese Funktion 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 sich in der Frage befindet). Wenn ein anderes Trennzeichen verwendet wird, können Sie zuerst sub durch einen Doppelpunkt ersetzen. Wenn das Trennzeichen beispielsweise _ wäre, dann string <- sub("_", ":", string)

c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"

HINZUGEFÜGT. strapplyc- und read.dcf-Lösungen.

HINWEIS.

Die Eingabe string wird folgendermaßen angenommen:

string <- c("G1:E001", "G2:E002", "G3:E003")
161
G. Grothendieck

Zum Beispiel mit gsub oder sub

    gsub('.*:(.*)','\\1',string)
    1] "E001" "E002" "E003"
20
agstudy

Hier ist eine weitere einfache Antwort

gsub("^.*:","", string)
9
Ragy Isaac

Dies sollte tun:

gsub("[A-Z][1-9]:", "", string)

gibt

[1] "E001" "E002" "E003"
4
user1981275

Spät zur Party, aber für die Nachwelt bietet das stringr package (Teil der beliebten Paketreihe "tidyverse") jetzt Funktionen mit harmonisierten Signaturen für die Stringbehandlung:

string <- c("G1:E001", "G2:E002", "G3:E003")
stringr::str_extract(string = string, pattern = "E[0-9]+")
# [1] "E001" "E002" "E003"
3
CSJCampbell

Wenn Sie data.table verwenden, ist tstrsplit() eine natürliche Wahl:

tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"
0
sindri_baldur