我在数据集中有一个变量,它按以下方式格式化:
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,但是没有用。
如果有人能提供任何帮助,我将不胜感激!
答案 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"