【发布时间】:2018-07-05 22:52:10
【问题描述】:
我看过其他帖子,详细介绍了如何将单个 excel 文件中的多个工作表导入 R,以及如何导入一系列每个都有一个工作表但不能同时包含两个工作表的 excel 文件。
我能够使以下代码在单个文件级别分段工作,但我认为我可能以某种简单的方式搞砸了循环。
当我执行循环时,我只从列表的第一个成员 (files[1]) 中获取输出,而不是从附加在 all_data 列表对象中的循环的所有迭代中获取输出。
这是我的代码:
# name filepath of excel files to import
file_path ="..."
# load names of excel files
files = list.files(path = file_path, pattern = ".xlsx", )
# create list to store data
all_data = list()
# create function to read multiple sheets per excel file
read_excel_allsheets <- function(filename, tibble = FALSE) {
sheets <- readxl::excel_sheets(filename)
x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
x <- lapply(x, as.data.frame)
names(x) <- sheets
}
# execute function for all excel files in "files"
for (i in length(files)){
filename = paste0(file_path,"/", files[i])
read_excel_allsheets(filename)
all_data = c(all_data, x)
}
我怀疑我只是犯了一个基本的循环错误,但我四处搜索却找不到解决方法。非常感谢任何帮助!
【问题讨论】:
-
几个 cmets:list.files 有
full.names参数,所以你不必预先添加路径。read_excel返回 tibbles,所以你不需要强制它到 data.frame。在循环内部,您没有将real_excel_allsheets()函数的结果分配给变量(我猜它应该是 x)。您创建了一个空列表并在循环内增长它。将其预分配给length(files)并由元素i分配 -
所有文件/选项卡中的数据结构相同吗?
标签: r excel function loops import