次のようなファイル名があり、name1.csv
この文字列の 2 つの部分文字列を抽出したいと考えています。1 つの変数に を格納するものと、別の変数にドットなしでname1
拡張子 を格納するものがあります。csv
そのような操作を可能にする Javaのような機能がないか探しindexOf
ていましたが、まったく見つかりませんでした。
何か助けはありますか?
使用strsplit
:
R> strsplit("name1.csv", "\\.")[[1]]
[1] "name1" "csv"
R>
a)ドットをエスケープする必要があることに注意してください(正規表現のメタ文字であるため)、b)strsplit()
通常は最初の要素のみが対象となるリストを返すという事実に対処します。
より一般的な解決策には、一致を抽出できる正規表現が含まれます。
ファイル名の特殊なケースについては、次のものもあります。
R> library(tools) # unless already loaded, comes with base R
R> file_ext("name1.csv")
[1] "csv"
R>
と
R> file_path_sans_ext("name1.csv")
[1] "name1"
R>
これらは非常に一般的なタスクであるため(basename
シェル内の参照など)。
使用strsplit()
:
http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html
例:
> strsplit('name1.csv', '[.]')[[1]]
[1] "name1" "csv"
2 番目の引数は正規表現であることに注意してください。そのため、単一のドットだけを渡すことはできません (「任意の文字」として解釈されます)。
正規表現を使用すると、たとえばこれを行うことができます
regmatches(x='name1.csv',gregexpr('[.]','name1.csv'),invert=TRUE)
[[1]]
[1] "name1" "csv"