首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gsub -在字符之前/之后添加空格

gsub -在字符之前/之后添加空格
EN

Stack Overflow用户
提问于 2016-07-14 20:25:46
回答 6查看 816关注 0票数 2

stackoverflow上的第一篇文章,希望也是众多文章中的第一篇。

我正在清理一个数据集,该数据集的一个列中包含作者列表。当有多个作者时,这些作者之间用&符号分隔,例如。Smith & Banks。然而,间距并不总是一致的,例如。Smith & Banks,Smith &Banks。

为了解决这个问题,我尝试了:

代码语言:javascript
复制
     gsub('\\S&','\\S &', dataset[,author.col])

这就给了史密斯银行-> SmitS & Banks。我怎样才能联系到->史密斯银行?

EN

回答 6

Stack Overflow用户

发布于 2016-07-14 20:33:59

这是另一种gsub方法:

代码语言:javascript
复制
# some test cases
authors <- c("Smith& Banks", "Smith   &Banks", "Smith&Banks", "Smith & Banks")
gsub("\\s*&\\s*", " & ", authors)
#[1] "Smith & Banks" "Smith & Banks" "Smith & Banks" "Smith & Banks"

一些更多的测试用例(超过2个作者,单个作者):

代码语言:javascript
复制
authors <- c("Smith& Banks", "Smith   &Banks &Nash", "Smith&Banks", "Smith & Banks", "Smith")
gsub("\\s*&\\s*", " & ", authors)
#[1] "Smith & Banks"        "Smith & Banks & Nash" "Smith & Banks"        "Smith & Banks"        "Smith"

正如OP在对他们的问题的评论中指出的那样,数据中不会出现两个作者之间的多个与号。

票数 3
EN

Stack Overflow用户

发布于 2016-07-14 20:30:52

下面是一个向gsub发出两个调用的解决方案

代码语言:javascript
复制
dataset[,author.col] <- gsub('([^\\s])&','\\1\\s&', dataset[,author.col])
dataset[,author.col] <- gsub('&([^\\s])','&\\s\\1', dataset[,author.col])
票数 2
EN

Stack Overflow用户

发布于 2016-07-14 20:33:31

下面是一种仅使用sub的方法

代码语言:javascript
复制
sub("\\b(?=&)|(?<=&)\\b", " ",  v1, perl = TRUE)
#[1] "Smith & Banks" "Smith & Banks"

使用具有更多组合的数据。在上面的文章中,我只考虑了操作员帖子中显示的选项。

代码语言:javascript
复制
 gsub("\\s*(?=&)|(?<=&)\\s*", " ", data, perl = TRUE)
 #[1] "Smith & Banks" "Smith & Banks" "Smith & Banks" "Smith & Banks" "Smith & Banks"

 gsub("\\s*&+|\\&+\\s*", " & ", data1)
 #[1] "Smith &  Banks" "Smith & Banks"  "Smith & Banks"  
 #[4]"Smith & Banks"  "Smith & Banks"  "Smith &  Banks" "Smith & Banks" 

或使用strsplit

代码语言:javascript
复制
sapply(strsplit(data1, "\\s*&+\\s*"), paste, collapse = " & ")
#[1] "Smith & Banks" "Smith & Banks" "Smith & Banks" "Smith & Banks" 
#[5] "Smith & Banks" "Smith & Banks" "Smith & Banks"

从本质上讲,如果有很多模式,strsplit方法会更好。

数据

代码语言:javascript
复制
v1 <- c("Smith& Banks", "Smith &Banks")
data = c("Smith& Banks", "Smith &Banks", "Smith & Banks", 
     "Smith &     Banks", "Smith&Banks")
data1 <- c(v1, "Smith&& Banks", "Smith && Banks", "Smith&&Banks")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38374139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档