web-dev-qa-db-ja.com

ピリオドでstrsplit関数を使用する方法

次の文字列をピリオドで分割したいと思います。 split引数に_"."_を指定してstrsplit()を試しましたが、必要な結果が得られませんでした。

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

私が望む出力は、次のようにsをリスト内の4つの要素に分割することです。

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

私は何をすべきか?

24
user3022875

strsplit()split引数で正規表現を使用する場合、.を使用して\\.をエスケープするか、charclass [.]を使用する必要があります。それ以外の場合は、.を特殊文字の意味として「任意の1文字」として使用します。

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

しかし、ここでのより効率的な方法は、strsplit()fixed引数を使用することです。この引数を使用すると、正規表現エンジンがバイパスされ、"."の完全一致が検索されます。

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

そしてもちろん、help(strsplit)をもっと見ることができます。

32
Rich Scriven

文字クラス の内側にドット.を配置するか、ドットが 特別な意味 の文字であるため、エスケープするために2つのバックスラッシュを前に付ける必要があります。 「任意の1文字に一致する(改行を除く)」という意味の正規表現

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

strsplit()の他に、scan()も使用できます。試してください:

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