首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Excel工作簿中读取某些工作表

从Excel工作簿中读取某些工作表
EN

Stack Overflow用户
提问于 2018-06-20 16:10:27
回答 2查看 2.6K关注 0票数 1

我有一本工作簿,里面有10张纸:一半的活页上有“调查”这个词,另一半的活页上有“人口普查”这个词。

我想在所有在工作表名称中有“调查”一词的工作表中阅读,并将它们附加到单独的工作簿中。

表格名称是: WA调查,测量MD,DC调查,VA调查,调查GA。

我所拥有的:

代码语言:javascript
复制
 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行完成这个任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 16:44:11

您可以像这样使用readxl包,并在一次读取所有内容之前过滤“调查”数据表。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2018-06-20 16:20:59

可以使用工作表名定义对象,然后使用lapply获取导入的Excel文件列表。

代码语言:javascript
复制
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工作表都包含相同顺序的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50952713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档