stackoverflow上的第一篇文章,希望也是众多文章中的第一篇。
我正在清理一个数据集,该数据集的一个列中包含作者列表。当有多个作者时,这些作者之间用&符号分隔,例如。Smith & Banks。然而,间距并不总是一致的,例如。Smith & Banks,Smith &Banks。
为了解决这个问题,我尝试了:
gsub('\\S&','\\S &', dataset[,author.col])这就给了史密斯银行-> SmitS & Banks。我怎样才能联系到->史密斯银行?
发布于 2016-07-14 20:33:59
这是另一种gsub方法:
# 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个作者,单个作者):
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在对他们的问题的评论中指出的那样,数据中不会出现两个作者之间的多个与号。
发布于 2016-07-14 20:30:52
下面是一个向gsub发出两个调用的解决方案
dataset[,author.col] <- gsub('([^\\s])&','\\1\\s&', dataset[,author.col])
dataset[,author.col] <- gsub('&([^\\s])','&\\s\\1', dataset[,author.col])发布于 2016-07-14 20:33:31
下面是一种仅使用sub的方法
sub("\\b(?=&)|(?<=&)\\b", " ", v1, perl = TRUE)
#[1] "Smith & Banks" "Smith & Banks"使用具有更多组合的数据。在上面的文章中,我只考虑了操作员帖子中显示的选项。
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
sapply(strsplit(data1, "\\s*&+\\s*"), paste, collapse = " & ")
#[1] "Smith & Banks" "Smith & Banks" "Smith & Banks" "Smith & Banks"
#[5] "Smith & Banks" "Smith & Banks" "Smith & Banks"从本质上讲,如果有很多模式,strsplit方法会更好。
数据
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")https://stackoverflow.com/questions/38374139
复制相似问题