阅读 Excel 工作簿中的某些工作表
Read in Certain Sheets From Excel Workbook
我有一本有 10 个 sheet 的作业簿:其中一半的 sheet 名称中有 "Survey" 一词,另一半的 "Census"它的 sheet 名称。
我想读入其 sheet 名称中包含单词 "Survey" 的所有 sheet,并将它们附加到单独的工作簿中。
Sheet 名称是:WA Survey、Survey MD、DC Survey、VA Survey、Survey GA。
我有:
library(XLConnect)
wb <- loadWorkbook("Data.xls")
dataMD <- readWorksheet(wb, sheet = "Survey MD", startCol = 1, endCol = 10)
dataWA <- readWorksheet(wb, sheet = "Survey WA", startCol = 1, endCol = 10)
dataDC <- readWorksheet(wb, sheet = "Survey DC", startCol = 1, endCol = 10)
dataVA <- readWorksheet(wb, sheet = "Survey VA", startCol = 1, endCol = 10)
dataGA <- readWorksheet(wb, sheet = "Survey GA", startCol = 1, endCol = 10)
total <- merge(dataMD,dataWA,dataDC,dataVA,dataGA,by="ID")
我怎样才能让这更简单?我希望我能在 3-4 行内完成这个任务?
您可以使用 sheet 个名称定义对象,然后使用 lapply
获取导入的 Excel 个文件的列表。
sheets <- paste("Survey", c("MD", "WA", "DC", "VA", "GA"))
excel.list <- lapply(sheets, function(x)
readWorksheetFromFile("Data.xls", sheet=x, startCol=1, endCol=10))
现在您可以处理此列表以获得您想要的最终 data.frame。
考虑使用 do.call(rbind, Excel.list))
当且仅当您的所有 Excel sheet 都包含相同顺序的相同变量。
您可以像这样使用 readxl 包并在一次阅读所有内容之前过滤调查数据表。
library(readxl)
# file including path if needed
file <- "Data.xls"
# read the sheets and only keep the Survey sheets
sheets <- excel_sheets(file)
sheets <- sheets[grep("Survey", sheets)]
# read the data, only first 10 columns (A:J)
excel_data <- lapply(sheets, read_excel, path = file, range = cell_cols("A:J") )
您最终得到了一个数据列表。如果所有列都相同,您可以使用 do.call("rbind", excel_data)
或 dplyr::bind_rows
我有一本有 10 个 sheet 的作业簿:其中一半的 sheet 名称中有 "Survey" 一词,另一半的 "Census"它的 sheet 名称。
我想读入其 sheet 名称中包含单词 "Survey" 的所有 sheet,并将它们附加到单独的工作簿中。
Sheet 名称是:WA Survey、Survey MD、DC Survey、VA Survey、Survey GA。
我有:
library(XLConnect)
wb <- loadWorkbook("Data.xls")
dataMD <- readWorksheet(wb, sheet = "Survey MD", startCol = 1, endCol = 10)
dataWA <- readWorksheet(wb, sheet = "Survey WA", startCol = 1, endCol = 10)
dataDC <- readWorksheet(wb, sheet = "Survey DC", startCol = 1, endCol = 10)
dataVA <- readWorksheet(wb, sheet = "Survey VA", startCol = 1, endCol = 10)
dataGA <- readWorksheet(wb, sheet = "Survey GA", startCol = 1, endCol = 10)
total <- merge(dataMD,dataWA,dataDC,dataVA,dataGA,by="ID")
我怎样才能让这更简单?我希望我能在 3-4 行内完成这个任务?
您可以使用 sheet 个名称定义对象,然后使用 lapply
获取导入的 Excel 个文件的列表。
sheets <- paste("Survey", c("MD", "WA", "DC", "VA", "GA"))
excel.list <- lapply(sheets, function(x)
readWorksheetFromFile("Data.xls", sheet=x, startCol=1, endCol=10))
现在您可以处理此列表以获得您想要的最终 data.frame。
考虑使用 do.call(rbind, Excel.list))
当且仅当您的所有 Excel sheet 都包含相同顺序的相同变量。
您可以像这样使用 readxl 包并在一次阅读所有内容之前过滤调查数据表。
library(readxl)
# file including path if needed
file <- "Data.xls"
# read the sheets and only keep the Survey sheets
sheets <- excel_sheets(file)
sheets <- sheets[grep("Survey", sheets)]
# read the data, only first 10 columns (A:J)
excel_data <- lapply(sheets, read_excel, path = file, range = cell_cols("A:J") )
您最终得到了一个数据列表。如果所有列都相同,您可以使用 do.call("rbind", excel_data)
或 dplyr::bind_rows