2016-06-25 6 views
4

Ich habe ein Zeichenvektor der folgenden Art aus:Wie ändert man das Trennzeichen in einem Vektor?

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

Ich versuche, ein Zeichen Vektor wie diese zu erstellen:

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

ich versucht habe:

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

Das scheint falsch zu sein. Wie kann ich das Worttrennzeichen in mylist wie oben gezeigt ändern?

Antwort

4

Wir können gsub verwenden, indem Sie das Leerzeichen (" ") als Muster verwenden und durch "+" ersetzen.

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

Ich nahm an, dass die führenden Leerzeichen als Tippfehler. Wenn dies nicht der Fall, können wir entweder regex lookarounds

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

Oder einige PCRE regex

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

danke für das Posten. Es tut mir sehr leid. Ich habe ein Beispiel vergessen, das ich der Liste hinzugefügt habe: – Mamba

+0

@HiThere Kein Problem. Die Antwort wird ebenfalls aktualisiert. – akrun

+0

@akrun das toll. Danke! – Mamba

3

verwenden können Sie das Paket verwenden stringr.

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

Zwischen [] wir geben, was wir mit + ersetzen möchten. In diesem Fall ist das ein einzelner Leerraum und -. Ich habe trimws aus Akruns Antwort verwendet, um den zusätzlichen Leerraum am Anfang einiger Elemente in Ihrer Zeichenfolge loszuwerden.

Dies ist noch eine andere Alternative.

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

Sie könnten chartr() verwenden. Verwenden Sie einfach das Zeichen + für Leerzeichen und - Zeichen.

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

Beachten Sie, dass ich auch die führenden Leerzeichen gekürzt habe, da es wirklich nicht notwendig ist, es zu behalten.

Verwandte Themen