我有一个包含csv文件的目录,大小约为12k,命名格式为
YYYY-MM-DD<TICK>.csv
。 <TICK>
是指股票的股票代码,例如MSFT,GS,QQQ等共有500种不同长度的代码。
我的目标是将所有csv合并为特定的刻度,并将其作为动物园对象保存在单独的目录中的单个RData文件中。
为了实现自动化,我设法进行了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(如果需要)
答案 0 :(得分: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"