【问题标题】:Partial Match String and full replacement over multiple vectors多个向量的部分匹配字符串和完全替换
【发布时间】:2019-10-04 10:05:40
【问题描述】:

希望通过提供将被搜索(和匹配)并用作替换的字符串向量来有效地替换单个列上的所有部分匹配字符串。即对于下面 df 中的每个向量,它将部分匹配 vec_string 中的向量。在找到匹配项的地方,它会简单地将整个字符串替换为 vec_string。即将“订户经理”转变为“经理”。通过向 vec_string 提供更多向量,它将搜索整个 df 直到全部完成。

我已经启动了这个函数,但似乎无法通过用 vec_string 替换 df 中的向量来完成它。感谢您的帮助

df <- c(
'solicitor'
,'subscriber manager'
,'licensed conveyancer'
,'paralegal'
,'property assistant'
,'secretary'
,'conveyancing paralegal'
,'licensee'
,'conveyancer'
,'principal'
,'assistant'
,'senior conveyancer'
,'law clerk'
,'lawyer'
,'legal practice director'
,'legal secretary'
,'personal assistant'
,'legal assistant'
,'conveyancing clerk')

vec_string <- c('manager','law')

#function to search and replace
replace_func <-
  function(vec,str_vec) {
    repl_str <- list()
    for(i in 1:length(str_vec)) {
      repl_str[[i]] <- grep(str_vec[i],unique(tolower(vec)))
    }
    names(repl_str) <- vec_string
    return(repl_str)
  }

replace_func(df,vec_string)

$`manager`
[1] 2

$law
[1] 13 14

如您所见,该函数返回一个命名列表,其中包含将替换的元素

【问题讨论】:

    标签: r list replace dplyr


    【解决方案1】:

    这应该可以解决问题

    res = sapply(df,function(x){
      match = which(sapply(vec_string,function(y) grepl(y,x)))
      if (length(match)){x=vec_string[match[1]]}else{x}
    })
    res
    
     [1] "solicitor"               "manager"                 "licensed conveyancer"   
     [4] "paralegal"               "property assistant"      "secretary"              
     [7] "conveyancing paralegal"  "licensee"                "conveyancer"            
    [10] "principal"               "assistant"               "senior conveyancer"     
    [13] "law"                     "law"                     "legal practice director"
    [16] "legal secretary"         "personal assistant"      "legal assistant"        
    [19] "conveyancing clerk" 
    

    我们将df 的每个部分与vec_string 的每个部分进行比较。如果匹配,则返回 vec_string 部分,否则保持原样。请注意,如果有超过 1 个匹配项,它将保留第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2016-09-14
      • 2023-04-10
      • 2015-01-25
      • 2012-12-01
      相关资源
      最近更新 更多