将多个Excel工作表组合为单个数据框,工作表名称为第一列,R

时间:2017-05-01 09:12:01

标签: r excel

我有一个包含19张工作表的Excel工作簿,名称为Sheet1到Sheet19。我想将所有19张纸张导入一个R data.frame并使用工作表名称作为第一列。所以我最终会得到类似的东西:

Excel表示我想要的数据框架

谢谢。

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用下面的readxl: 我在该工作簿中的所有三个工作表中都有一个excel表“Book1.xlsx”,其格式相似。我在三张纸上有a,b和c列。您不必指定名称,“工作表”对象将带有您的工作表名称。此外,请注意使用lapply将遍历您的工作表,之后我们可以将其附加到最终数据框

我的假设:您的所有表单结构都是类似的。

library(readxl)
library(tidyverse)
setwd("C:\\Users\\pradeep4.kumar\\Desktop") ###set your working directory where your data resides
sheet = excel_sheets("Book1.xlsx")
df = lapply(setNames(sheet, sheet), function(x) read_excel("Book1.xlsx", sheet=x))
df = bind_rows(df, .id="Sheet")

输出示例:

> data.frame(df)
    Sheet   a  b   c
1  Sheet3  17 59  82
2  Sheet3  17 26  84
3  Sheet3  92 33  17
4  Sheet3  12 60  16
33 Sheet2  50 27  42
34 Sheet2  47 75  49
35 Sheet2  94 44  20
36 Sheet2  79 23  55
37 Sheet2  35 35   5
38 Sheet2  30 74  29
39 Sheet1   2 95  81
40 Sheet1  89 65  30

答案 1 :(得分:1)

如果您使用data.table代替data.frame,会更容易。因此,假设您的xlsx文件被称为Book1.xlsx,这应该可以正常工作

df <- data.table()
for (i in 1:19)
{
  sheet <- paste0("Sheet",i)
  temp.df <- as.data.table(read.xlsx(file = "Book1.xlsx",sheetIndex = sheet))
  temp.df[,sheetname:=i]
enter code here

  df <- rbind(df,temp.df)
}

请注意,每张表格中的列名称必须相同。