2014-10-30 9 views
17

Vorrei suddividere la stringa seguente in base ai periodi. Ho provato strsplit() con "." nell'argomento split, ma non ho ottenuto il risultato desiderato.Come utilizzare la funzione strsplit con un periodo

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

L'uscita che voglio è quello di dividere s in 4 elementi in una lista, come segue.

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

Cosa devo fare?

risposta

22

Quando si utilizza un'espressione regolare nella split argomento del strsplit(), hai avuto modo di sfuggire al . con \\., o utilizzare un charclass [.]. Altrimenti si usa . come carattere speciale che significa "qualsiasi singolo carattere".

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

Ma il metodo più efficace è quello di utilizzare l'argomento fixed in strsplit(). L'utilizzo di questo argomento bypasserà il motore regex e cercherà una corrispondenza esatta di ".".

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

E, naturalmente, si può vedere help(strsplit) di più.

2

Devi o posizionare il punto . interno di un character class o precedere con due barre rovesciate per sfuggire da quando il punto è un personaggio di special meaning in regex che significa "adattarsi a qualsiasi singolo carattere (ad eccezione di nuova riga)"

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

Oltre strsplit(), è inoltre possibile utilizzare scan(). Prova:

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