我有一个由以下样式组成的字符向量:
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
中的单词分隔符,如上所示?
答案 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), "[ -]", "+")