替换单元格内的所有内容,除了我正在寻找的字符串

时间:2017-11-05 19:38:06

标签: r regex

我在数据集中有一个变量,它按以下方式格式化:

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

Tornado有很多次,我的目标是移除一个单元格内的所有东西,除了我正在寻找的字符串(显然是Tornado)所以它看起来像这样:

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

我尝试过:

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

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

我在gsub的"Tornado"部分使用了"[Tornado]""^Tornado.""Tornado[.]."pattern的每个REGEX组合,我想到的是str_replace,但是没有用。

如果有人能提供任何帮助,我将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以使用ifelse:如果&#34;龙卷风&#34;在字符串内(用grepl定义)它返回&#34; Tornado&#34;否则它会返回原始值。

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

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

答案 1 :(得分:2)

使用神话般的stringr库:

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

哪个收益

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

原则与其他答案一样:匹配Tornado不区分大小写,如果找到则替换完整的字符串。

答案 2 :(得分:1)

您可以将sub()ignore.case=TRUE一起使用。在正则表达式中,只需查找"tornado"的任何匹配项,并删除字符串的其余部分,并在两边使用贪婪的匹配.*

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

您还可以使用前面的(?i)来编写不区分大小写的正则表达式。

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