[英]Replace everything inside a cell except the string I'm looking for
我在數據集中有一個變量,其格式如下:
tornado <- c("TORNADO",
"TORNADO F0",
"Tornado",
"HAIL",
"WATERSPOUT TORNADO",
"WATERSPOUT-TORNADO",
"TORNADOES, TSTM WIND, HAIL",
"COLD AIR TORNADO",
"HEAT")
龍卷風在那里很多次,我的目標是刪除單元格中除我要查找的字符串(顯然是龍卷風)之外的所有內容,因此它看起來像這樣:
tornado_2 <- ("Tornado",
"Tornado",
"Tornado",
"HAIL",
"Tornado",
"Tornado",
"Tornado",
"Tornado",
"HEAT")
我已經嘗試過:
gsub(pattern = "", replacement = "", x = vector)
和
str_replace(string="" , pattern="", replacement="")
我使用了"Tornado"
, "[Tornado]"
, "^Tornado."
每個REGEX組合"^Tornado."
, "Tornado[.]."
在gsub和str_replace的pattern
部分中,我可以想到但無濟於事。
有人可以提供任何幫助,我將不勝感激!
您可以使用ifelse
:如果“ tornado”在字符串中(用grepl
定義),則返回“ Tornado”,否則返回原始值。
ifelse(grepl("tornado", tornado, ignore.case = TRUE), "Tornado", tornado)
# [1] "Tornado" "Tornado" "Tornado" "HAIL" "Tornado" "Tornado" "Tornado"
# [8] "Tornado" "HEAT"
使用神話般的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
大小寫,如果找到則替換完整的字符串。
您可以將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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.