【问题标题】:purrr::map_dfr gives number of list element as .id argument, not value of list elementpurrr::map_dfr 将列表元素的数量作为 .id 参数给出,而不是列表元素的值
【发布时间】:2021-09-28 07:44:49
【问题描述】:

我需要将 .xls 文件列表导入 R。相当标准的操作,使用 file.list 和 purrr,之前完成了几次。由于某种原因,我无法使用 readxl 包,因为我不断收到 libxls 错误,所以切换到 XLConnect,这似乎可以工作。

但是,使用以下代码:

file.list <- list.files('./Raw/', pattern = '.xls', full.names = TRUE)
rws <- function(x) {XLConnect::readWorksheetFromFile(x, sheet = 1, startRow =4)}
df <- purrr::map_dfr(file.list,rws, .id = "source")

我得到一个输出,其中source 列包含列表中文件的位置 (1,2,3,...),而不是文件名。有什么问题?

【问题讨论】:

    标签: r purrr xlconnect


    【解决方案1】:

    试着这样做

    file.list <- list.files('./Raw/', pattern = '.xls', full.names = TRUE) %>% 
              purrr::set_names()
    rws <- function(x) {XLConnect::readWorksheetFromFile(x, sheet = 1, startRow =4)}
    df <- purrr::map_dfr(file.list,rws, .id = "source")
    

    【讨论】:

    • 成功了,谢谢!
    【解决方案2】:

    你可以通过 - 的位置获取文件的名字

    library(dplyr)
    library(purrr)
    
    df <- map_dfr(file.list,rws, .id = "source") %>%
            mutate(source = basename(file.list)[source])
            #If you don't want the extension of the filename
            #mutate(source = tools::file_path_sans_ext(basename(file.list))[source])
    
    df
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2022-01-02
      • 2020-01-25
      • 2011-02-14
      • 2017-04-09
      • 1970-01-01
      相关资源
      最近更新 更多