【问题标题】:Importing Excel-tables in R在 R 中导入 Excel 表格
【发布时间】:2020-07-08 13:46:11
【问题描述】:

有没有办法将命名的 Excel 表作为 data.frame 导入 R?

我通常在一个工作表上有几个命名的 Excel 表,我想将它们作为 data.frames 导入,而不依赖静态行和列引用来确定 Excel 表的位置。

我尝试设置 namedRegion,这是几个 Excel 导入函数的可用参数,但这似乎不适用于命名的 Excel 表。我目前正在使用 openxlxs 包,它有一个函数 getTables(),它从单个工作表创建一个带有 Excel 表名称的变量,而不是表中的数据。

【问题讨论】:

    标签: r excel openxlsx


    【解决方案1】:

    获取您的命名表需要一点工作。

    首先您需要加载工作簿。

    library(openxlsx)
    
    wb <- loadWorkbook("name_excel_file.xlsx")
    

    接下来,您需要提取命名表的名称。

    # get the name and the range
    tables <- getTables(wb = wb,
                        sheet = 1)
    

    如果您有多个命名表,它们都在tables 中。我的命名表名为 Table1

    接下来您将提取列号和行号,稍后您将使用它们从 Excel 文件中提取命名表。

    # get the range
    table_range <- names(tables[tables == "Table1"])
    table_range_refs <- strsplit(table_range, ":")[[1]]
    
    # use a regex to extract out the row numbers
    table_range_row_num <- gsub("[^0-9.]", "", table_range_refs)
    # extract out the column numbers
    table_range_col_num <- convertFromExcelRef(table_range_refs)
    

    现在您使用colsrows 参数重新读取Excel 文件。

    # finally read it
    my_df <- read.xlsx(xlsxFile = "name_excel_file.xlsx",
                       sheet = 1,
                       cols = table_range_col_num[1]:table_range_col_num[2],
                       rows = table_range_row_num[1]:table_range_row_num[2])
    

    您最终会得到一个仅包含命名表内容的数据框。

    我之前用过这个。我在某个地方找到了这段代码,但我不知道从哪里来了。

    【讨论】:

    • 谢谢,我会的。试试这个。 :)
    【解决方案2】:

    这个链接可能对你有用

    https://stackoverflow.com/a/17709204/10235327

    1. Install XLConnect package
    2. Save a path to your file in a variable
    3. Load workbook
    4. Save your data to df
    

    要获取表名,您可以使用函数

    getTables(wb,sheet=1,simplify=T)
    

    地点:

    • wb - 你的工作簿
    • 工作表 - 工作表名称或者也可能是数字
    • simplify = TRUE(默认)结果被简化为向量

    https://rdrr.io/cran/XLConnect/man/getTables-methods.html

    这是代码(不是我的,从上面的主题中复制的,只是稍微修改了一下)

    require(XLConnect)
    sampleFile = "C:/Users/your.name/Documents/test.xlsx"
    wb = loadWorkbook(sampleFile)
    myTable <- getTables(wb,sheet=1)
    df<-readTable(wb, sheet = 1, table = myTable)
    

    【讨论】:

    • 谢谢,这确实解决了我的问题,尽管 XLConnect 包依赖于 Java,我们不允许在公司 PC 上安装它。 ://
    • 不客气!是的,所有这些“不允许安装”也与我的工作有关 :) 但是,也许他们可以为您提供可以使用 java 的远程 PC。
    【解决方案3】:

    您可以查看下一个包:

    library(xlsx)
    Data <- read.xlsx('YourFile.xlsx',sheet=1)
    
    library(readxl)
    Data <- read_excel('YourFile.xlsx',sheet=1)
    

    这两个选项都允许您定义特定区域以将数据加载到R

    【讨论】:

      【解决方案4】:

      我使用包openxlsx 中的read.xlsx。例如:

      library(openxlsx)
      fileA <- paste0(some.directory,'excel.file.xlsx')
      A <-  read.xlsx(fileA, startRow = 3)
      

      希望对你有帮助

      【讨论】:

      • 这就是我现在正在做的事情。但这并没有解决 Excel 中命名表的问题。
      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 2018-09-30
      • 2020-02-05
      • 2019-12-09
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多