【问题标题】:Combine Multiple Excel Worksheets into Single Dataframe with Sheet Name as First Column, R将多个 Excel 工作表合并到单个数据框中,工作表名称作为第一列,R
【发布时间】:2017-05-01 09:12:01
【问题描述】:

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

我想要的数据框结构的 Excel 再现

谢谢。

【问题讨论】:

    标签: r excel


    【解决方案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)
    }
    

    请记住,每张工作表中的列名必须相同。

    【讨论】:

    • 没问题。您可以将您的问题标记为已回答:)
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2021-08-09
      • 2019-07-26
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多