【发布时间】:2017-07-11 21:02:01
【问题描述】:
我正在编写代码:
读取文件夹列表
从列表中对包含特定文本元素的文件夹进行排序和提取
从每个文件夹中获取完整的文件名
在每个文件中找到标签/表格
在我的嵌套文件列表上循环/lapply read.xlsx()
最终目标是从各自文件夹中的各自文件中读取所有选项卡/工作表,同时创建列来识别它们来自哪个选项卡/工作表以及它们来自哪个文件夹,以及然后将它们一次性合并。
我首选的 excel 文件读取包是“openxlsx”。
这是我获取文件夹和文件的代码:
path<- "/Users/jackserna/Google Drive/Folder"
dataFolders<- list.files(path)
dataFolders<- sort(dataFolders[starts_with(match = "FY", vars = dataFolders)])
files<- lapply(lapply(dataFolders, FUN = function(x){
paste(path,x,sep = "/")
}), FUN = function(x){
list.files(x, pattern = "*.xlsx", full.names = TRUE)
})
我无法为我的所有文件和所有工作表循环/应用读取功能。我会阅读不超过 1 个文件夹,这将不得不重复。我使用了来自this post的一些代码...
data.to.merge <- lapply(lapply(files[[1]], FUN = function(x){
read.xlsx(x, sheet = 3, cols = 1:5)
}), na.omit)
merged.daata <- Reduce(function(...) merge(..., all = T), data.to.merge)
但是,这种方法不允许我将工作表名称附加为我读入的每张工作表的额外列。这种方法假设工作表 #3 上有数据,但令我沮丧的是,这些文件并非如此.数据分散在工作表中,必须忽略某些工作表才能合并。
为了尝试抓取所有表格并解析出我不想要的表格,执行以下操作:
allsheets<- list()
for(i in files){
for(j in i){
sheets<- getSheetNames(j)
allsheets<- cbind(allsheets,sheets)
}
}
但这已经变成了一场噩梦,无法用于阅读和合并。
如何让 R 理解我想要完成的任务?
【问题讨论】: