2014-10-30 3 views
17

Я хотел бы разбить следующую строку на ее периоды. Я пробовал strsplit() с "." в аргументе split, но не получил результат, который я хочу.Как использовать функцию strsplit с периодом

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

Выход я хочу, чтобы разбить s на 4 элементов в списке, следующим образом.

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

Что мне делать?

ответ

22

При использовании регулярных выражений в split аргумента strsplit(), вы должны спасаясь от . с \\., или использовать charclass [.]. В противном случае вы используете . в качестве своего специального символа, означающего «любой символ».

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

Но более эффективный метод здесь использовать fixed аргумент в strsplit(). Использование этого аргумента будет обходить механизм регулярных выражений и искать точное соответствие ".".

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

И, конечно же, вы можете увидеть help(strsplit) больше.

2

Вам нужно либо поставить точку . внутри character class или перед ним двойными косыми чертами, чтобы избежать этого, так как точки является характер special meaning в регулярном выражении это означает «любой одиночный символ (за исключением символа новой строки)»

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

Кроме strsplit(), вы также можете использовать scan(). Попытка:

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

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

  • Нет связанных вопросов^_^