【问题标题】:Parameterize pattern match as function argument in R将模式匹配参数化为 R 中的函数参数
【发布时间】:2014-08-30 08:45:59
【问题描述】:

我有一个 csv 文件的目录,大约有 12k 个,命名格式是

 YYYY-MM-DD<TICK>.csv

&lt;TICK&gt; 是指股票的代码,例如MSFT、GS、QQQ 等共有 500 个代码,长度不一。 我的目标是合并特定刻度的所有 csv,并在单独的目录中的单个 RData 文件中另存为 zoo 对象。

为了自动完成这项工作,我设法进行了 csv 操作,将其设置为一个以代码为输入的函数,并进行所有数据修改。但是我一直在制作文件列表阶段,传递模式以匹配正在处理的代码。我无法根据股票代码匹配模式。

以下是我尝试过的功能,但不起作用:

csvlist2zoo <- function(symbol){
  csvlist=list.files(path = "D:/dataset/",pattern=paste("'.*?",symbol,".csv'",sep=""),full.names=T)
}

这行得通,但不能让它在函数中工作

csvlist2zoo <- function(symbol){
  csvlist=list.files(path = "D:/dataset/",pattern='.*?"ibm.csv',sep=""),full.names=T) 
}

在SO中搜索,有类似的问题,不完全符合我的要求。但如果我错过了什么,请指出正确的方向。仍在使用正则表达式。

操作系统:Win8 64 位,R 版本 3.1.0(如果需要)

【问题讨论】:

    标签: regex r csv zoo


    【解决方案1】:

    试试:

      csvlist2zoo <- function(symbol){
      list.files(pattern=paste0('\\d{4}-\\d{2}-\\d{2}',symbol, ".csv"))
      }
    
      csvlist2zoo("QQQ")
     #[1] "2002-12-19QQQ.csv" "2008-01-25QQQ.csv"
    
     csvlist2zoo("GS")
     #[1] "2005-05-18GS.csv"
    

    我在工作目录(linux)中创建了一些文件

     v1 <- c("2001-05-17MSFT.csv", "2005-05-18GS.csv", "2002-12-19QQQ.csv", "2008-01-25QQQ.csv")
     lapply(v1, function(x) write.csv(1:3, file=x))
    

    更新

    使用paste

     csvlist2zoo <- function(symbol){
     list.files(pattern=paste('\\d{4}-\\d{2}-\\d{2}',symbol, ".csv", sep=""))
     }
    csvlist2zoo("QQQ")
    #[1] "2002-12-19QQQ.csv" "2008-01-25QQQ.csv"
    

    【讨论】:

    • 谢谢,效果很好。虽然无法理解为什么 paste 不起作用,但是 paste0 起作用了!
    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多