R 替换&;符号并组合周围的字符串

R 替换&;符号并组合周围的字符串,r,regex,stringr,R,Regex,Stringr,我正在对企业名称进行字符串清理,我想做两件事: 将符号(&)替换为“和” 合并&,周围的字符串,但仅合并这些元素,而不是整个字符串 这是我尝试过的,但由于某些原因,输出没有矢量化 库(stringr) 图书馆(dplyr) test这里的问题是str_split返回一个列表,其中每个字符串都有一个条目,而str_split(name,“\\s+”[[1]]总是引用第一个字符串的条目。因此,必须将函数映射到列表中的每个条目。您可以使用lappy或purr软件包中的amap功能执行此操作: new

我正在对企业名称进行字符串清理,我想做两件事:

  • 将符号(&)替换为“和”
  • 合并&,周围的字符串,但仅合并这些元素,而不是整个字符串
  • 这是我尝试过的,但由于某些原因,输出没有矢量化

    库(stringr)
    图书馆(dplyr)
    
    test这里的问题是
    str_split
    返回一个列表,其中每个字符串都有一个条目,而
    str_split(name,“\\s+”[[1]]
    总是引用第一个字符串的条目。因此,必须将函数映射到列表中的每个条目。您可以使用
    lappy
    purr
    软件包中的a
    map
    功能执行此操作:

    new <- test %>% 
      mutate(clean = purrr::map_chr(name, function(x) {
        paste(str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) - 1], 
              str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) + 1], sep = "and")
      }))
    
    > new
    # A tibble: 2 x 2
      name                        clean        
      <chr>                       <chr>        
    1 brady & frank mortgage bank bradyandfrank
    2 joe and sons deli           joeandsons 
    
    new%
    mutate(clean=purrr::map_chr(名称,函数(x)){
    粘贴(str_split(x,“\\s+”[[1]][grep(&|和“,”str_split(x,“\\s+”[[1]])-1],
    str_-split(x,“\\s+”[[1]][grep(&| and”,str_-split(x,“\\s+”[[1]])+1],sep=“and”)
    }))
    >新的
    #一个tibble:2x2
    清白
    1 brady&frank抵押银行bradyandfrank
    2乔和儿子德利·乔恩森
    
    这里的问题是
    str_-split
    返回一个列表,其中每个字符串都有一个条目,而
    str_-split(name,“\\s+”)[[1]]
    则始终引用第一个字符串的条目。因此,必须将函数映射到列表中的每个条目。您可以使用
    lappy
    purr
    软件包中的a
    map
    功能执行此操作:

    new <- test %>% 
      mutate(clean = purrr::map_chr(name, function(x) {
        paste(str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) - 1], 
              str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) + 1], sep = "and")
      }))
    
    > new
    # A tibble: 2 x 2
      name                        clean        
      <chr>                       <chr>        
    1 brady & frank mortgage bank bradyandfrank
    2 joe and sons deli           joeandsons 
    
    new%
    mutate(clean=purrr::map_chr(名称,函数(x)){
    粘贴(str_split(x,“\\s+”[[1]][grep(&|和“,”str_split(x,“\\s+”[[1]])-1],
    str_-split(x,“\\s+”[[1]][grep(&| and”,str_-split(x,“\\s+”[[1]])+1],sep=“and”)
    }))
    >新的
    #一个tibble:2x2
    清白
    1 brady&frank抵押银行bradyandfrank
    2乔和儿子德利·乔恩森
    
    这对我的示例数据集有效,但不幸的是对我的真实数据无效
    map_chr
    在返回空字符串时显式失败,这很好,但迫使我使用另一种方法。再次感谢这个解决方案。这对我的示例数据集有效,但不幸的是对我的真实数据无效
    map_chr
    在返回空字符串时显式失败,这很好,但迫使我使用另一种方法。再次感谢您的解决方案。
    new <- test %>% 
      mutate(clean = purrr::map_chr(name, function(x) {
        paste(str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) - 1], 
              str_split(x, "\\s+")[[1]][grep("&|and", str_split(x, "\\s+")[[1]]) + 1], sep = "and")
      }))
    
    > new
    # A tibble: 2 x 2
      name                        clean        
      <chr>                       <chr>        
    1 brady & frank mortgage bank bradyandfrank
    2 joe and sons deli           joeandsons