2015-08-22 5 views
5

Ich bin buggle, um herauszufinden, wie zu gsub alles nach dem "Blank" der ersten Stunde Wert.R gsub alles nach dem leeren

as.data.frame(valeur) 

     valeur 
1 8:01 8:15 
2 17:46 18:00 
3   <NA> 
4   <NA> 
5   <NA> 
6   <NA> 
7 8:01 8:15 
8 17:46 18:00 

Was ich brauche, ist

 valeur 
1   8:01 
2   17:46 
3   <NA> 
4   <NA> 
5   <NA> 
6   <NA> 
7   8:01 
8   17:46 

Jeder Hinweis?

versuchte ich

gsub("[:blank:].*$","",valeur) 

Fast
valeur = c(" 8:01 8:15 ", " 17:46 18:00 ", NA, NA, NA, NA, " 8:01 8:15 ", 
" 17:46 18:00 ") 

Antwort

4

Ich denke, Sie haben führende/nacheilende Räume vom Ausgang 'valeur'. Wir können diese mit gsub entfernen. Wir passen ein oder mehrere Leerzeichen vom Anfang des Strings (^\\s+) oder (|) Leerzeichen am Ende des Strings an (\\s+$), ersetzen durch ''.

valeur1 <- gsub('^\\s+|\\s+$', '', valeur) 

Wenn wir die ersten Nicht-Leerzeichen benötigen, passen wir den Raum (\\s+), gefolgt von nicht-Raum (\\S+) bis zum Ende des Strings und ersetzen mit ''.

sub('\\s+\\S+$', '', valeur1) 
#[1] "8:01" "17:46" NA  NA  NA  NA  "8:01" "17:46" 

Um die letzten Nicht-Leerzeichen zu erhalten, verwenden sub ein oder mehrere Zeichen übereinstimmen, die von einem oder mehreren Raum kein Raum (\\S+) vom Anfang des Strings (‚^‘) gefolgt sind () und ersetzen Sie es durch '', um das letzte Nicht-Leerzeichen zu erhalten.

sub('^\\S+\\s+', '', valeur1) 
#[1] "8:15" "18:00" NA  NA  NA  NA  "8:15" "18:00" 

Das Obige kann in einem einzigen Schritt durchgeführt werden, wo wir durch eine oder mehr nicht gefolgt null oder mehr Raum am Anfang (^\\s*) oder (|) mit einem einem oder mehrere Zwischenraum (\\s+) entsprechen Leerzeichen (\\S+), gefolgt von null oder mehr Leerzeichen am Ende() und durch '' ersetzen.

gsub("^\\s*|\\s+\\S+\\s*$","",valeur) 
#[1] "8:01" "17:46" NA  NA  NA  NA  "8:01" "17:46" 

Oder eine andere Option ist stri_extract_first oder stri_extract_last von library(stringi), wo wir ein oder mehrere Nicht-Leerzeichen übereinstimmen am Anfang oder am Ende.

library(stringi) 
stri_extract_first(valeur, regex='\\S+') 
#[1] "8:01" "17:46" NA  NA  NA  NA  "8:01" "17:46" 

Für die last non_space Zeichen

stri_extract_last(valeur, regex='\\S+') 
#[1] "8:15" "18:00" NA  NA  NA  NA  "8:15" "18:00" 
+1

dank perfekt! – giacomo

2

im Interesse des Beitrags, der nur gedacht:

substr(x = valeur, start = 2, stop = 6) 
[1] "8:01 " "17:46" NA  NA  NA  NA  "8:01 " "17:46"