【发布时间】:2017-05-01 09:12:01
【问题描述】:
我有一个 Excel 工作簿,其中包含 19 个工作表,名称为 Sheet1 到 Sheet19。我想将所有 19 张工作表导入一个 R data.frame 并将工作表名称用作第一列。所以我最终会得到类似的东西:
我想要的数据框结构的 Excel 再现
谢谢。
【问题讨论】:
我有一个 Excel 工作簿,其中包含 19 个工作表,名称为 Sheet1 到 Sheet19。我想将所有 19 张工作表导入一个 R data.frame 并将工作表名称用作第一列。所以我最终会得到类似的东西:
我想要的数据框结构的 Excel 再现
谢谢。
【问题讨论】:
如果您使用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)
}
请记住,每张工作表中的列名必须相同。
【讨论】:
您可以使用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
【讨论】: