40

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

そのような操作を可能にする Javaのような機能がないか探しindexOfていましたが、まったく見つかりませんでした。

何か助けはありますか?

4

3 に答える 3

72

使用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シェル内の参照など)。

于 2013-01-05T16:27:14.477 に答える
7

使用strsplit():

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

例:

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

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

于 2013-01-05T16:28:42.633 に答える
2

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

regmatches(x='name1.csv',gregexpr('[.]','name1.csv'),invert=TRUE)
[[1]]
[1] "name1" "csv"  
于 2013-01-05T21:43:53.157 に答える