在字符串中查找文本并用另一个字符串+ R替换整个字符串

时间:2014-10-22 20:18:31

标签: r

我在R编程中有这个矢量/数组,我想找到" WIND" (upercase或小写)并用" WIND"替换整个文本。

> b
 [1] "TORNADO"                   "TSTM WIND"                 "HAIL"                     
 [4] "FREEZING RAIN"             "SNOW"                      "ICE STORM/FLASH FLOOD"    
 [7] "SNOW/ICE"                  "WINDTER STORM"             "HURRICANE OPAL/HIGH WINDS"
[10] "THUNDERSTORM WINDS"  

例如" TSTM WIND"会来#34; WIND"。那么" WINDTER STORM"和" HURRICANO OPAL / HIGH WINDS" ...等

我试过这个但没有快乐

> gsub("*WIND*","WIND",b,ignore.case=T)
 [1] "TORNADO"                   "TSTM WIND"                 "HAIL"                     
 [4] "FREEZING RAIN"             "SNOW"                      "ICE STORM/FLASH FLOOD"    
 [7] "SNOW/ICE"                  "WINDTER STORM"             "HURRICANE OPAL/HIGH WINDS"
[10] "THUNDERSTORM WINDS"       
>

这显示符合我标准的那些

> grepl("*WIND*",b,ignore.case=T)
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE

2 个答案:

答案 0 :(得分:2)

由于您要使用相同的字符串替换所有匹配项,因此可以使用[<-

b[grepl("WIND", b)] <- "WIND"

您也可以使用sub

sub(".*(WIND).*", "\\1", b)

两者都导致

 [1] "TORNADO"               "WIND"                  "HAIL"                 
 [4] "FREEZING RAIN"         "SNOW"                  "ICE STORM/FLASH FLOOD"
 [7] "SNOW/ICE"              "WIND"                  "WIND"                 
[10] "WIND" 

答案 1 :(得分:0)

最简单的解决方案是在stringr包中。

require(stringr)
str_replace_all(b, ignore.case(".*WIND.*"), "WIND")

这应该做你想要的。像这样的案例就是制作弦乐器的原因。