2016-06-25 4 views
4

У меня есть вектор символ, состоящий из следующего стиля:Как изменить символ разделителя слов в векторе?

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, как показано выше?

ответ

4

Мы можем использовать gsub, сопоставляя пространство (" ") в качестве образца и заменяем его "+".

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

Я предполагал, что ведущие пространства как опечатки. Если это не так, мы можем либо использовать регулярные выражения lookarounds

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"  
+0

Благодарим вас за сообщение. Мне очень жаль. Я забыл один пример, который я добавил в список – Mamba

+0

@HiThere Нет проблем. Ответ также обновляется. – akrun

+0

@ akrun это здорово. Спасибо! – Mamba

3

Вы можете использовать пакет stringr.

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

Между [] мы указываем, что мы хотим заменить +. В этом случае это одно пустое пространство и -. Я использовал trimws из ответа Akrun, чтобы избавиться от лишнего пробела в начале некоторых элементов вашей строки.

Это еще одна альтернатива.

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

Вы можете использовать chartr(). Просто повторите использование знака + как для пробела, так и для - символов.

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

Обратите внимание, что я также обрезал ведущие пробелы, так как на самом деле нет необходимости его хранить.

Смежные вопросы