![](/img/trans.png)
[英]Appending a row to a dataframe while reading from multiple csv files in R
[英]Reading multiple csv files from a folder with R using regex
我希望使用R
從單個文件夾讀取多個csv
文件。 如果我想閱讀每個csv
文件,可以使用:
list.files(folder, pattern="*.csv")
例如,請參閱以下問題:
但是,我只希望一次讀取文件的四個子集之一。 以下是將三個模型的四個文件分別分組的示例。
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
來讀取存在的四個組中的給定組,但是我不知道。
如何分別閱讀四個組?
編輯
我不確定我是否能夠從以下問題的答案中獲得解決方案:
我可能不得不花一些時間重新整理regex
才能將這些答案應用於我的問題。 Mako212
在下面提供的答案非常出色。
REGEX 101快速說明:
對於匹配字符串的開頭和結尾的情況(這是您在此處需要做的所有事情),以下原則適用於匹配.csv
並且以parm
開頭的文件:
list.files(folder, pattern="^parm.*?\\\\.csv")
^
斷言我們位於字符串的開頭,因此^parm
表示match parm
,但^parm
是它位於字符串的開頭。
.*?
表示匹配任何內容,直到模式的下一部分匹配為止。 在這種情況下,匹配直到我們看到句點\\\\.
.
表示匹配REGEX中的任何字符,因此我們需要使用\\\\
對其進行轉義以匹配文字.
(請注意,在R中,您需要雙轉義\\\\
,在其他語言中,單轉義\\
就足夠了)。
最后, csv
表示在后面匹配csv
.
。 如果我們真的很徹底,可以使用\\\\.csv$
和$
來表示字符串的結尾。 如果您具有其他擴展名為.csv2
文件,則需要美元符號。 \\\\.csv
將匹配.csv2
,而\\\\.csv$
將不匹配。
在您的情況下,您可以將REGEX模式中的parm
替換為JS
, my
或supN
來選擇其他文件類型之一。
最后,如果要匹配總文件列表的一部分,則可以使用|
邏輯“或”運算符:
list.files(folder, pattern = "^(parm|JS|supN).*?\\\\.csv")
這將返回除以my
開頭的文件名以外的所有文件名
問題中顯示的list.files
語句正在使用list.files
,但是list.files
接受正則表達式 ,而不是glob 。
Sys.glob要使用glob,請使用Sys.glob,如下所示:
olddir <- setwd(folder)
parm <- lapply(Sys.glob("parm*.csv"), read.csv)
現在, parm
是從這些文件讀取的數據幀的列表。
glob2rx注意,可以使用glob2rx函數將glob轉換為正則表達式:
parm <- lapply(list.files(folder, pattern = glob2rx("parm*.csv")), read.csv)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.