我正在编写一个循环脚本,它涉及从工作簿中读取文件(使用包XLConnect)。挑战在于文件名包含我想忽略的字符(代表时间)。
例如,以下是这些文件的3条路径:
G://User//Documents//daily_data//Op_Schedule_20160520_132025.xlsx G://User//Documents//daily_data//Op_Schedule_20160521_142805.xlsx G://User//Documents//daily_data//Op_Schedule_20160522_103052.xlsx
我需要导入数百个这样的文件。我可以轻松地说明代表日期的字符串(例如20160522),但不能说明时间。
有没有办法让R忽略位于文件路径中的某些字符?以下是我编写脚本的想法(" ???"是我需要帮助的地方)。我知道循环可能不是最有效的方式,但如果您有任何建议,我可以接受建议:
require(XLConnect)
path= "G://User//Documents//daily_data//Op_Schedule_"
wd.seq = format(seq(as.Date("2014-01-01"),as.Date("2016-12-31"),"days"),format="%Y%m%d")
scheduleList = rep(list(matrix(1,1,1)),length(wd.seq))
for(i in 1:length(wd.seq)) {
wb = loadWorkbook(file= paste0(path,wd.seq[i],"???",".xlxs"))
scheduleList[[i]] = readWorksheet(wb,sheet='=SCHEDULE', header = TRUE)
}
`
感谢阅读和建议,如果有的话。
马修
答案 0 :(得分:1)
我不知道这是否有用,但是如果你想读取某个目录中的所有文件(在我看来你就是这样),你可以使用所有文件名读取到列表中list.files()函数,例如
GetValue=ComboboxName.SelectedItem.Tag.ToString()
然后使用for循环
加载循环遍历列表的xlsx文件grep -i
我之前没有使用过XLConnect函数,因此确切的代码可能不起作用,但循环将遍历该目录中的所有文件,因此您可以使用文件名的i变量构建加载调用(它不会是绝对路径,因此您可能需要使用粘贴来添加文件路径的第一部分)
我意识到目录中可能还有其他文件不是excel文件,你可以使用grepl来只选择包含“OP_Schedule _”的文件
fileList <- list.files(""G://User//Documents//daily_data//")
或者可能只选择目录中的.xlsx文件:
for(i in fileList) {
loadWorkbook(file = i)
}
修改以符合您的回复: 由于您需要将其与序列相匹配,因此您可以像之前那样进行:
fileListClean <- fileList[grepl("Op_Schedule_",fileList)]
然后使用grepl只选择以扩展名开头的文件:
fileListClean <- fileList[grepl(".xlsx",fileList)]
完全披露:我从这个答案得到的最后一部分:grep using a character vector with multiple patterns