我有一个包含19张工作表的Excel工作簿,名称为Sheet1到Sheet19。我想将所有19张纸张导入一个R data.frame并使用工作表名称作为第一列。所以我最终会得到类似的东西:
Excel表示我想要的数据框架
谢谢。
答案 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)
}
请注意,每张表格中的列名称必须相同。