从excel电子表格导入多个工作表到r

时间:2018-04-19 15:44:58

标签: r dataframe import readxl

我想从单个.xlsx文件中导入多个工作表(由工作表名称中的公共字符串选择),并将它们连接到单个数据框中。例如,如果我有一个excel文件('data.xlsx'),其工作表名为samples1,samples2,samples3,controls1,controls2,controls3。我想列出工作表名称,例如:

sheet_list <- lapply(excel_sheets('data.xlsx'), read_excel, path = 'data.xlsx')

然后,我想导入名称中包含“samples”的所有工作表,并将它们绑定到名为“samples”的数据框中。我怎样才能有效地实现这一目标?

3 个答案:

答案 0 :(得分:2)

你非常接近!您可以使用lapply等来使用基本R来完成此操作,但我通常使用purrr包来执行此类任务。

library(purrr)
library(readxl)    

sheets <- excel_sheets('data.xlsx')

sample_sheets <- sheets[grepl("samples", sheets)]

sheet_df <- map_dfr(sample_sheets, ~read_excel(path = 'data.xlsx', sheet = .x, id = .x))

这样做:

  1. 获取表格的名称。
  2. 使用grepl将工作表子集化为仅包含&#34;样本&#34;在名字中。
  3. 使用map_dfr迭代样本表,读取每个样本表并指定一个等于表单名称的id列,然后按行将所有结果绑定在一起并返回一个数据框。

答案 1 :(得分:1)

这样做你想要的吗?

path <- "C:\\your_path_here\\test.xlsx"

path %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, path = path)

答案 2 :(得分:0)

试试这个

library(readxl)
list <- excel_sheets("path_to_excel.xlsx")
list_samples <- list[grepl("samples", list)]
df <- rbind(lapply(list_samples, function(x) read_excel("path_to_excel.xlsx", sheet = x)))