purrr::map_dfr的.id参数返回列表序号而非文件名问题咨询
问题原因
purrr::map_dfr() 的 .id 参数取值有明确规则:
- 若传入的迭代对象(此处为
file.list)是带名称的列表/向量,.id列会填充对应元素的名称 - 若传入的迭代对象没有名称,会默认填充元素在序列中的位置序号(1、2、3...)
你当前通过list.files()返回的file.list是无名称的字符向量,因此source列只能输出序号。
解决方法
两种常用方案按需选择即可:
方案1:source列保留完整文件路径
直接给file.list设置和自身值一致的名称,代码调整如下:
file.list <- list.files('./Raw/', pattern = '.xls', full.names = TRUE) rws <- function(x) {XLConnect::readWorksheetFromFile(x, sheet = 1, startRow =4)} # 给file.list设置名称,值为文件路径本身 df <- purrr::map_dfr(purrr::set_names(file.list), rws, .id = "source")
方案2:source列仅保留文件名(不带路径前缀)
设置名称时调用basename()提取纯文件名:
file.list <- list.files('./Raw/', pattern = '.xls', full.names = TRUE) rws <- function(x) {XLConnect::readWorksheetFromFile(x, sheet = 1, startRow =4)} # 名称设置为纯文件名 df <- purrr::map_dfr(purrr::set_names(file.list, basename(file.list)), rws, .id = "source")
内容的提问来源于stack exchange,提问作者AadiR
相关产品推荐
相关产品推荐

