web-dev-qa-db-ja.com

ファイル名を名前、拡張子に分割する

次のようなファイルの名前があります:name1.csvそして、この文字列の2つの部分文字列を抽出したいと思います。 1つの変数にname1を格納するものと、別の変数にドットなしで拡張子csvを格納するものがあります。

indexOfのようなJavaのような操作ができるような関数があるかどうかを検索しましたが、何も見つかりませんでした。

何か助け?

36
Layla

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などを参照)。

61

strsplit()を使用します。

http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html

例:

> strsplit('name1.csv', '[.]')[[1]]
[1] "name1" "csv"  

2番目の引数は正規表現であるため、単一のドットを渡すことはできません(「任意の文字」として解釈されます)。

7

正規表現を使用して、たとえばこれを行うことができます

regmatches(x='name1.csv',gregexpr('[.]','name1.csv'),invert=TRUE)
[[1]]
[1] "name1" "csv"  
2
agstudy