2017-11-08 4 views
0

Rを使用して、複数のcsvファイルを1つのフォルダから読み取ろうとします。私はすべてのcsvファイルを読みたいと思った場合、私は使用することができますregexを使用してRを持つフォルダから複数のcsvファイルを読み取る

list.files(folder, pattern="*.csv") 

参照、例えば、これらの質問:しかし

Reading multiple csv files from a folder into a single dataframe in R

Importing multiple .csv files into R

、私は唯一の1を読みたいです一度に4つのファイルのサブセット。以下は、3つのモデルごとに4つのファイルをグループ化した例です。私は例えば、読みたい場合は

JS.N_Nov6_2017_model220_N200.csv 
JS.N_Nov6_2017_model221_N200.csv 
JS.N_Nov6_2017_model222_N200.csv 
my.IDs.alt_Nov6_2017_model220_N200.csv 
my.IDs.alt_Nov6_2017_model221_N200.csv 
my.IDs.alt_Nov6_2017_model222_N200.csv 
parms_Nov6_2017_model220_N200.csv 
parms_Nov6_2017_model221_N200.csv 
parms_Nov6_2017_model222_N200.csv 
supN_Nov6_2017_model220_N200.csv 
supN_Nov6_2017_model221_N200.csv 
supN_Nov6_2017_model222_N200.csv 

parmsファイルは、私は仕事しない、次のことを試してください:

list.files(folder, pattern="parm*.csv") 

私は私が読みregexを使用する必要がありますと仮定しています存在する4つのグループの所与のグループが、私は知らない。

4つのグループのそれぞれを個別に読み取るにはどうすればよいですか?

EDIT

私はこの質問への回答から解を得ることができたかどうかわからない午前:

Listing all files matching a full-path pattern in R

私は時間の公平なビットを過ごすために持っていたかもしれませんregexをブラッシングして私の問題に答えを適用してください。下に提供される回答はMako212です。

+1

可能な複製(https://でのstackoverflow .com/questions/10353540/listing-all-files-matching-a-full-path-pattern-in-r);その質問に対する最初の答えがあなたの問題を解決すると思う - あなたが今逃れる必要があるように見える(今はあなたのパターンが "parm"で、その後に "csv"という文字が1つ出現する) – duckmayr

+0

Getすべてのファイル名、* list.files *はアルファベットでそれらを返し、* split *を使い、* lapply *や* forloop *を使ってチャンクを読み込みます。例えば、 'myFiles < - 1:12; – zx8754

+4

"parm":list.files(folder、pattern = "^ parm。*?\\。csv") ' – Mako212

答えて

4

迅速REGEX 101説明:

あなたがここに行うために必要なすべての文字列の先頭と末尾に一致した場合には、以下のprinicplesは.csvあるファイルと一致してparmで始めるには適用され:

list.files(folder, pattern="^parm.*?\\.csv")

^たちは、文字列の先頭にいる主張します。 ^parmは、文字列の先頭にある場合にのみ、parmと一致することを意味します。

.*?は、パターンの次の部分が一致するまで何かを一致させることを意味します。この場合、試合我々が表示されるまでの期間\\.

.はREGEXにある任意の文字に一致する意味、私たちは文字通り.は(他では、Rであなたは二重のエスケープ\\を必要とすることに注意一致する\\でそれをエスケープする必要があります単一のエスケープ\はsufficienctです)。

最後にcsvは、.の後にcsvと一致することを意味します。実際に徹底するつもりならば、$を使用して\\.csv$を使用して文字列の最後を示すことがあります。.csv2のような拡張子を持つファイルがある場合は、ドル記号が必要です。 \\.csv.csv2と一致し、\\.csv$はそうではありません。あなたのケースでは

、単にあなたの他のファイルの種類のいずれかを選択するようにJSmy、またはsupNとREGEXパターンでparmを置き換えることができます。そのものを除くすべてのファイル名を返します

list.files(folder, pattern = "^(parm|JS|supN).*?\\.csv")

:あなたの合計ファイルリストのサブセットと一致したい場合

最後に、あなたは|論理的「または」演算子を使用することができますグロブを使用しているmy

1

と疑問に示すlist.files文を開始したがlist.filesregular expressions、ないglobs受け付けます。グロブを使用するには

Sys.globはこのようSys.globを使用します。

olddir <- setwd(folder) 
parm <- lapply(Sys.glob("parm*.csv"), read.csv) 

parmは現在、データフレームのリストであるこれらのファイルから読み込みます。 glob2rx関数が正規表現にグロブを変換するために使用することができることを

glob2rx注:[Rでフルパスパターンに一致するすべてのファイルを一覧表示]の

parm <- lapply(list.files(folder, pattern = glob2rx("parm*.csv")), read.csv) 
+0

ありがとうございます。どちらの答えも優れています。 –

関連する問題