【问题标题】:Importing all sheet of a ODS file in R keeping the name of the sheets在R中导入ODS文件的所有工作表,保留工作表的名称
【发布时间】:2020-08-15 22:02:40
【问题描述】:

我有这个 LibreOffice Calc (.ods) 文件 (download)。

我想导入此文档的所有工作表。在导入中,我将创建一个列表,其中列表的每个元素都是一张。我希望列表元素的名称保留 ODS 文件中工作表的原始名称。

我创建了这段代码:

  library(readODS)
  library(dplyr)
  library(purrr)
  library(tidyr)

  path <- "example.ods"

  mylist <- path %>%
    ods_sheets() %>%
    set_names() %>%
    map(read_ods, skip = 1, path = path)

通过运行此代码,set_names() 函数出现错误:

Error in set_names(.) : 1 argument passed to 'names<-' which requires 2

如何解决它以创建一个包含名为原始工作表的元素的列表?

【问题讨论】:

    标签: r list dplyr purrr ods


    【解决方案1】:

    由于我不愿意从 Google Drive 下载随机文件,因此我为此设置了我自己的示例 ODS 文件,其中包含两张表,“foo”和“bar”,如下所示:

    foo
    
    a b
    1 2
    3 4
    
    bar
    
    a b
    7 6
    5 4
    

    因此,您的代码存在一些问题。您在第一个问题上绊倒了,您需要 set_names() 的两个参数。您的另一个问题是您没有为map() 指定both .x .f。我们可以通过使用中间分配步骤来解决这些问题,如下所示:

    library(readODS)
    library(dplyr)
    library(purrr)
    library(tidyr)
    
    path <- "test.ods"
    
    sheets <- ods_sheets(path)
    mylist <- map(seq_along(sheets), read_ods, path = path) %>%
        set_names(sheets)
    mylist
    
    $foo
      a b
    1 1 2
    2 3 4
    
    $bar
      a b
    1 7 6
    2 5 4
    

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多