使用vroom读取远程归档文件时如何获取内部文件名而非归档名?
无需本地解压,用vroom读取远程归档并保留归档内文件名
需求说明
希望使用vroom读取远程归档文件时,添加一列存储归档内的文件名(而非归档文件本身的名称),且跳过本地archive_extract解压步骤。
解决方案
可以通过archive包的archive_read()函数直接读取远程归档内的单个文件,结合purrr::map_dfr循环处理所有归档内文件,同时手动绑定归档内文件名,无需本地解压:
library(tidyverse) library(archive) library(vroom) # 远程归档文件地址 remote_archive <- "ftp://opendata.dwd.de/climate_environment/CDC/grids_germany/daily/regnie/ra2021m.tar" # 获取归档内所有文件的路径列表 archive_contents <- archive(remote_archive) %>% pull(path) # 遍历读取每个归档内文件,添加filename列并合并结果 final_data <- map_dfr(archive_contents, function(file_path) { # 直接从远程归档读取单个文件 vroom_fwf(archive_read(remote_archive, file_path), col_positions = fwf_widths(rep(4, 611)), col_types = cols(.default = col_integer()), na = "-999") %>% # 添加归档内的文件名 mutate(filename = file_path) }) # 验证文件名列 final_data$filename %>% unique()
原理说明
archive(remote_archive):远程获取归档文件的目录结构,提取出所有内部文件的路径archive_read(remote_archive, file_path):直接从远程归档中读取指定的单个文件,无需本地保存map_dfr(...):循环处理每个内部文件,读取后添加文件名列,最终合并为一个完整的数据框
内容的提问来源于stack exchange,提问作者ckluss
相关产品推荐
相关产品推荐

