2014-10-30 2 views
17

Ich möchte die folgende Zeichenfolge durch ihre Punkte teilen. Ich versuchte strsplit() mit "." in der split Argument, aber nicht das Ergebnis, das ich will. Wie benutze ich die strsplit Funktion mit einem Punkt

s <- "I.want.to.split" 
strsplit(s, ".") 
[[1]] 
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" 

Der Ausgang ich will, ist s in 4 Elemente in einer Liste zu spalten, wie folgt.

[[1]] 
[1] "I"  "want" "to" "split" 

Was soll ich tun?

Antwort

22

Wenn Sie einen regulären Ausdruck in der split Argument von strsplit() verwenden, haben Sie die . mit \\. zu entkommen bekam, oder eine charclass [.] verwenden. Ansonsten verwenden Sie . als Sonderzeichen, "jedes einzelne Zeichen".

s <- "I.want.to.split" 
strsplit(s, "[.]") 
# [[1]] 
# [1] "I"  "want" "to" "split" 

Aber die effizientere Methode ist es, das fixed Argument in strsplit() zu verwenden. Mit diesem Argument umgehen Sie die Regex-Engine und suchen nach einer genauen Übereinstimmung von ".".

strsplit(s, ".", fixed = TRUE) 
# [[1]] 
# [1] "I"  "want" "to" "split" 

Und natürlich können Sie help(strsplit) für mehr sehen.

2

Sie müssen den Punkt entweder platzieren . innerhalb eines character class oder mit zwei Schrägstriche vorangestellt es seit dem Punkt zu entkommen ist ein Zeichen von special meaning in regex „ein beliebiges Zeichen (außer Newline) entsprechen“, was bedeutet

s <- 'I.want.to.split' 
strsplit(s, '\\.') 
# [[1]] 
# [1] "I"  "want" "to" "split" 
1

Neben strsplit() können Sie auch scan() verwenden. Versuchen Sie:

scan(what = "", text = s, sep = ".") 
# Read 4 items 
# [1] "I"  "want" "to" "split"