我使用 readxl 包从多个 excel 文件导入数据,并在脚本中创建了一个函数,以便仅导入我需要的特定工作表
read_excel_sheets <- function(excelDoc) {
sheets <- readxl::excel_sheets(excelDoc)
sheets <- sheets[4:6]
x <- lapply(sheets, function(X) readxl::read_excel(excelDoc, sheet = X))
return(x)
}
#load files in folder
rawfiles <- list.files()
IMPORT <- lapply(rawfiles, FUN = read_excel_sheets)
将我的文件夹中的文件加载到我的脚本中后,IMPORT 变成一个列表[10],其中包含列表[3],基本上是列表中的列表。
不幸的是,我无法使用reduce(full_join) 将数据收集到一个数据表中。我尝试过仅使用一个 Excel 文件并使用 unlist() 来查看是否可以将我的工作表从列表列表中取出,但这不起作用。
Test <- read_excel_sheets("Hop_L_Trial1.xlsx")
Test_Test <- unlist(Test)
我也尝试过
rawfiles <- list.files()
IMPORT <- lapply(rawfiles,
FUN = read_excel_sheets)
Test_3 <- rbindlist(IMPORT)
并收到错误“第 1 项的第 1 列的长度为 2 与长度为 6 的第 2 列不一致。仅回收长度为 1 的列。”任何有关如何将我的数据加入到一个数据表中的建议将不胜感激,谢谢。
最佳答案
您可以使用 purrr
中的 map_df
将数据作为单个数据帧获取。
read_excel_sheets <- function(excelDoc) {
sheets <- readxl::excel_sheets(excelDoc)
sheets <- sheets[4:6]
x <- purrr::map_df(sheets, function(X) readxl::read_excel(excelDoc, sheet = X))
return(x)
}
IMPORT <- purrr::map_df(rawfiles, FUN = read_excel_sheets)
您还可以使用 do.call
+ rbind
基本 R 函数。
read_excel_sheets <- function(excelDoc) {
sheets <- readxl::excel_sheets(excelDoc)
sheets <- sheets[4:6]
x <- do.call(rbind, lapply(sheets, function(X) readxl::read_excel(excelDoc, sheet = X)))
return(x)
}
IMPORT <- do.call(rbind, lapply(rawfiles, FUN = read_excel_sheets))
关于r - 在列表的列表中连接数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62482411/