如何更改向量中的单词分隔符?

时间:2016-06-25 09:47:00

标签: r

我有一个由以下样式组成的字符向量:

mylist <- c('John Myer Stewert','Steve',' Michael Boris',' Daniel and Frieds','Michael-Myer')

我正在尝试创建一个像这样的字符向量:

mylist <- c('John+Myer+Stewert','Steve',' Michael+Boris',' Daniel+and+Frieds','Michael+Myer')

我试过了:

test <- cat(paste(shQuote(mylist , type="cmd"), collapse="+"))

这似乎不对。如何更改mylist中的单词分隔符,如上所示?

3 个答案:

答案 0 :(得分:6)

您可以使用chartr()。只需对空格和+字符重复使用-符号。

chartr(" -", "++", trimws(mylist))
# [1] "John+Myer+Stewert" "Steve"             "Michael+Boris"    
# [4] "Daniel+and+Frieds" "Michael+Myer"  

请注意,我还修剪了前导空格,因为实际上没有必要保留它。

答案 1 :(得分:4)

我们可以通过将空格(gsub)作为模式进行匹配来使用" ",并将其替换为"+"

gsub(" ", "+", trimws(mylist))
#[1] "John+Myer+Stewert" "Steve"             "Michael+Boris"   
#[4]  "Daniel+and+Frieds" "Michael-Myer"    

我认为领先的空间是拼写错误。如果不是,我们可以使用正则表达式外观

gsub("(?<=[a-z])[ -](?=[[:alpha:]])", "+", mylist, perl = TRUE)
#[1] "John+Myer+Stewert"  "Steve"              " Michael+Boris"    
#[4] " Daniel+and+Frieds" "Michael+Myer"   

或某些PCRE正则表达式

gsub("(^ | $)(*SKIP)(*F)|[ -]", "+", mylist, perl = TRUE)
#[1] "John+Myer+Stewert"  "Steve"              " Michael+Boris"    
#[4] " Daniel+and+Frieds" "Michael+Myer"    

答案 2 :(得分:3)

您可以使用包stringr

library(stringr)
str_replace_all(trimws(mylist), "[ -]", "+")
#[1] "John+Myer+Stewert" "Steve" "Michael+Boris"
#[4] "Daniel+and+Frieds" "Michael+Myer"

[]之间,我们使用+指定要替换的内容。在这种情况下,这是一个空格-。我使用Akrun的答案中的trimws来消除字符串中某些元素开头的额外空格。

这是另一种选择。

library(stringi)
stri_replace_all_regex(trimws(mylist), "[ -]", "+")