Abschneiden des Endes einer Zeichenfolge in R nach einem Zeichen, das null oder mehrmals vorhanden sein kann

Ich habe folgende Daten:

temp<-c("AIR BAGS:FRONTAL" ,"SERVICE BRAKES HYDRAULIC:ANTILOCK",
    "PARKING BRAKE:CONVENTIONAL",
    "SEATS:FRONT ASSEMBLY:POWER ADJUST",
    "POWER TRAIN:AUTOMATIC TRANSMISSION",
    "SUSPENSION",
    "ENGINE AND ENGINE COOLING:ENGINE",
    "SERVICE BRAKES HYDRAULIC:ANTILOCK",
    "SUSPENSION:FRONT",
    "ENGINE AND ENGINE COOLING:ENGINE",
    "VISIBILITY:WINDSHIELD WIPER/WASHER:LINKAGES")

Ich möchte einen neuen Vektor erstellen, der nur den Text vor dem ersten ":" enthält, wenn ein ":" vorhanden ist, und das ganze Wort, wenn ":" nicht vorhanden ist.

Ich habe versucht zu verwenden:

temp=data.frame(matrix(unlist(str_split(temp,pattern=":",n=2)), 
+                        ncol=2, byrow=TRUE))

aber es funktioniert nicht in den Fällen, in denen es kein ":" gibt

Ich weiß, dass diese Frage sehr ähnlich ist:Zeichenkette von einem bestimmten Zeichen in R abschneiden, die verwendeten:

sub("^[^.]*", "", x)

Aber ich bin mit regulären Ausdrücken nicht sehr vertraut und habe mich bemüht, dieses Beispiel umzukehren, um nur den Anfang der Zeichenfolge beizubehalten.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage