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
软件包中的amap
功能执行此操作:
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
软件包中的amap
功能执行此操作:
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