繁体   English   中英

purrr::map_dfr 给出列表元素的数量作为.id 参数,而不是列表元素的值

[英]purrr::map_dfr gives number of list element as .id argument, not value of list element

我需要将.xls 文件列表导入到R。相当标准的操作,使用file.list 和purrr,之前做过几次。 出于某种原因,我无法使用 readxl package,因为我不断收到 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")

我得到一个 output,其中source列包括列表中文件的position (1,2,3,...),而不是文件名。 问题是什么?

尝试这样做

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")

您可以通过以下方式从 position 获取文件的名称 -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM