如何通过忽略文件路径中的某些字符来读取 csv 文件或加载 excel 工作簿?
How to read a csv file or load an excel workbook by ignoring some characters in the file path?
我正在编写一个循环脚本,它涉及从工作簿中读取文件(使用包 XLConnect)。挑战在于文件名包含我想忽略的字符(代表时间)。
例如,这些文件有 3 个路径:
G://User//Documents//daily_data//Op_Schedule_20160520_132025.xlsx
G://用户//文档//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)
}
`
感谢阅读和建议,如果有的话。
马修
我不知道这是否有帮助,但是如果你想读取某个目录中的所有文件(在我看来这就是你想要的),你可以将所有文件名读入一个使用 list.files() 函数列出,例如
fileList <- list.files(""G://User//Documents//daily_data//")
然后使用 for 循环加载 xlsx 文件循环遍历列表
for(i in fileList) {
loadWorkbook(file = i)
}
我之前没有使用过 XLConnect 函数,所以确切的代码可能不起作用,但循环将遍历该目录中的所有文件,因此您可以使用 i 变量构造加载调用文件名(虽然它不是绝对路径,因此您可能需要使用粘贴来添加文件路径的第一部分)
我意识到目录中可能有其他文件不是 excel 文件,您可以使用 grepl 来 select 只有包含 "OP_Schedule_"
的文件
fileListClean <- fileList[grepl("Op_Schedule_",fileList)]
或者可能仅 selecting 目录中的 .xlsx 文件:
fileListClean <- fileList[grepl(".xlsx",fileList)]
编辑以适合您的回复:
由于你需要将它拟合到一个序列中,你可以像之前那样做:
wd.seq = format(seq(as.Date("2014-01-01"),as.Date("2016-12-31"),"days"),format="%Y%m%d")
wd.seq2 <- paste("Op_Schedule_", wd.seq, sep = "")
然后使用 grepl 只选择以该扩展名开头的文件:
fileListClean <- fileList[grepl(paste(wd.seq2, collapse = "|"), fileList)]
完全披露:我从这个 SO 答案中得到的最后一部分:grep using a character vector with multiple patterns
我正在编写一个循环脚本,它涉及从工作簿中读取文件(使用包 XLConnect)。挑战在于文件名包含我想忽略的字符(代表时间)。
例如,这些文件有 3 个路径:
G://User//Documents//daily_data//Op_Schedule_20160520_132025.xlsx G://用户//文档//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)
}
`
感谢阅读和建议,如果有的话。
马修
我不知道这是否有帮助,但是如果你想读取某个目录中的所有文件(在我看来这就是你想要的),你可以将所有文件名读入一个使用 list.files() 函数列出,例如
fileList <- list.files(""G://User//Documents//daily_data//")
然后使用 for 循环加载 xlsx 文件循环遍历列表
for(i in fileList) {
loadWorkbook(file = i)
}
我之前没有使用过 XLConnect 函数,所以确切的代码可能不起作用,但循环将遍历该目录中的所有文件,因此您可以使用 i 变量构造加载调用文件名(虽然它不是绝对路径,因此您可能需要使用粘贴来添加文件路径的第一部分)
我意识到目录中可能有其他文件不是 excel 文件,您可以使用 grepl 来 select 只有包含 "OP_Schedule_"
的文件fileListClean <- fileList[grepl("Op_Schedule_",fileList)]
或者可能仅 selecting 目录中的 .xlsx 文件:
fileListClean <- fileList[grepl(".xlsx",fileList)]
编辑以适合您的回复: 由于你需要将它拟合到一个序列中,你可以像之前那样做:
wd.seq = format(seq(as.Date("2014-01-01"),as.Date("2016-12-31"),"days"),format="%Y%m%d")
wd.seq2 <- paste("Op_Schedule_", wd.seq, sep = "")
然后使用 grepl 只选择以该扩展名开头的文件:
fileListClean <- fileList[grepl(paste(wd.seq2, collapse = "|"), fileList)]
完全披露:我从这个 SO 答案中得到的最后一部分:grep using a character vector with multiple patterns