我希望用来从单个文件夹中R读取多个csv文件.如果我想阅读csv我可以使用的每个文件:
list.files(folder, pattern="*.csv")
Run Code Online (Sandbox Code Playgroud)
例如,请参阅以下问题:
但是,我只希望一次读取文件的四个子集中的一个.下面是三个模型的四个文件的示例分组.
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
Run Code Online (Sandbox Code Playgroud)
如果我只想阅读,例如,parms我尝试以下文件,这是行不通的:
list.files(folder, pattern="parm*.csv")
Run Code Online (Sandbox Code Playgroud)
我假设我可能需要用来regex阅读目前四组的特定组,但我不知道.
如何分别阅读四组中的每一组?
编辑
我不确定我是否能够从这个问题的答案中获得解决方案:
我可能不得不花费相当多的时间regex来应对这些问题的答案.下面提供的答案Mako212非常出色.
一个快速的REGEX 101解释:
对于匹配字符串的开头和结尾的情况,这是您需要在此处执行的所有操作,以下原则适用于匹配.csv以及开头的文件parm:
list.files(folder, pattern="^parm.*?\\.csv")
^断言我们在字符串的开头,所以^parm意味着匹配parm,但只有当它在字符串的开头.
.*?意味着匹配任何东西,直到模式的下一部分匹配.在这种情况下,匹配直到我们看到一个时期\\.
.表示匹配REGEX中的任何字符,因此我们需要使用它\\来匹配文字.(注意在R中你需要双重转义\\,在其他语言中,单个转义\是足够的).
最后csv意味着匹配csv之后..如果我们要非常彻底,我们可能会使用\\.csv$它$来指示字符串的结尾.如果您有其他扩展名类似的文件,则需要美元符号.csv2.\\.csv会匹配.csv2,\\.csv$但不会.
在你的情况,你可以简单地替换parm与正则表达式模式JS,my或supN以选择其他文件类型之一.
最后,如果要匹配总文件列表的子集,可以使用|逻辑"或"运算符:
list.files(folder, pattern = "^(parm|JS|supN).*?\\.csv")
哪个会返回除开头的文件名以外的所有文件名 my