R: gsub of exact full string with fixed = T

╄→尐↘猪︶ㄣ 提交于 2019-12-24 17:53:09

问题


I am trying to gsub exact FULL string - I know I need to use ^ and $. The problem is that I have special characters in strings (could be [, or .) so I need to use fixed=T. This overrides the ^ and $. Any solution is appreciated. Need to replace 1st, 2nd element in exact_orig with 1st, 2nd element from exact_change but only if full string is matched from beginning to end.

exact_orig = c("oz","32 oz")
exact_change = c("20 oz","32 ct")

gsub_FixedTrue <- function(i) {
  for(k in seq_along(exact_orig)) i = gsub(exact_orig[k],exact_change[k],i,fixed=TRUE)
  return(i)
}

Test cases:

print(gsub_FixedTrue("32 oz")) #gives me "32 20 oz" - wrong! Must be "32 ct"
print(gsub_FixedTrue("oz oz")) # gives me "20 oz 20 oz" - wrong! Must remain as "oz oz"

I read a somewhat similar thread, but could not make it work for full string (grep at the beginning of the string with fixed =T in R?)


回答1:


If you want to exactly match full strings, i don't think you really want to use regular expressions in this case. How about just the match() function

fixedTrue<-function(x) {
    m <- match(x, exact_orig)
    x[!is.na(m)] <- exact_change[m[!is.na(m)]]
    x
}

fixedTrue(c("32 oz","oz oz"))
# [1] "32 ct" "oz oz"


来源:https://stackoverflow.com/questions/30918550/r-gsub-of-exact-full-string-with-fixed-t

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!