2017-11-05 1 views
1

ich eine Variable in einem Datensatz haben, die in der folgenden Art und Weise formated ist:Ersetzen Sie alles in einer Zelle mit Ausnahme der Zeichenfolge Ich suche nach

tornado <- c("TORNADO",      
      "TORNADO F0",     
      "Tornado",     
      "HAIL",   
      "WATERSPOUT TORNADO",  
      "WATERSPOUT-TORNADO",   
      "TORNADOES, TSTM WIND, HAIL", 
      "COLD AIR TORNADO",   
      "HEAT") 

Tornado gibt es viele Male, und mein Ziel ist es zu entfernen alles in einer Zelle mit Ausnahme der Zeichenfolge ich suche nach (natürlich Tornado), so sieht es wie folgt aus:

tornado_2 <- ("Tornado", 
       "Tornado", 
       "Tornado", 
       "HAIL", 
       "Tornado", 
       "Tornado", 
       "Tornado", 
       "Tornado", 
       "HEAT") 

ich habe es versucht, mit:

gsub(pattern = "", replacement = "", x = vector) 

und

str_replace(string="" , pattern="", replacement="") 

nutzte ich jede REGEX Kombination von "Tornado", "[Tornado]", "^Tornado.", "Tornado[.]." im pattern Teil gsub und str_replace ich aber ohne Erfolg denken.

Ich wäre dankbar für jede Hilfe, die jemand bieten kann!

Antwort

2

Sie können ifelse verwenden: Wenn "Tornado" innerhalb der Zeichenfolge (definiert mit grepl) ist, gibt es "Tornado" zurück, andernfalls gibt es den ursprünglichen Wert zurück.

ifelse(grepl("tornado", tornado, ignore.case = TRUE), "Tornado", tornado) 

# [1] "Tornado" "Tornado" "Tornado" "HAIL" "Tornado" "Tornado" "Tornado" 
# [8] "Tornado" "HEAT" 
+0

Eine andere ähnliche 'Ersetzen (Tornado, Grepl ("Tornado", Tornado, Wahr), "Tornado") –

1

Sie könnten sub() mit ignore.case=TRUE verwenden. Suchen Sie im regulären Ausdruck nach einem beliebigen Vorkommen "tornado" und entfernen Sie den Rest der Zeichenfolge mit einer gierigen Übereinstimmung .* auf beiden Seiten.

sub(".*tornado.*", "Tornado", tornado, ignore.case=TRUE) 
# [1] "Tornado" "Tornado" "Tornado" "HAIL" "Tornado" "Tornado" "Tornado" 
# [8] "Tornado" "HEAT" 

Sie könnten auch mit (?i) vor der Tür einen Groß- und Kleinschreibung regulären Ausdruck schreiben.

sub("(?i).*tornado.*", "Tornado", tornado) 
# [1] "Tornado" "Tornado" "Tornado" "HAIL" "Tornado" "Tornado" "Tornado" 
# [8] "Tornado" "HEAT" 
2

die fabelhafte stringr Bibliothek verwenden:

library(stringr) 

tornado <- c("TORNADO", "TORNADO F0", "Tornado", "HAIL", "WATERSPOUT TORNADO", "WATERSPOUT-TORNADO", "TORNADOES, TSTM WIND, HAIL", "COLD AIR TORNADO", "HEAT") 
tornado_2 <- str_replace(tornado, regex(".*Tornado.*", ignore_case = TRUE), "Tornado") 
tornado_2 

Welche ergibt

# [1] "Tornado" "Tornado" "Tornado" "HAIL" "Tornado" "Tornado" "Tornado" "Tornado" "HEAT" 

Prinzip ist wie andere Antworten: match Tornado Fall unsensibel und die vollständige Zeichenfolge ersetzen, wenn gefunden.

Verwandte Themen