You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中批量导入子文件夹CSV并添加父文件夹名称列

解决方案

直接用purrr::map_dfr结合路径提取的方式,就能实现批量导入并添加日期列,最终合并成适合跨日期对比的长格式数据集:

library(tidyverse)

# 目标数据路径
data_path <- "/Users/cevieth/Desktop/*MTL Rental Research/Rstats Coding/StatsCan and Air BnB Coding/Inside Air BnB Data"

# 获取所有listings.csv的完整路径
airbnb_files <- list.files(
  path = data_path,
  pattern = "listings.csv",
  recursive = TRUE,
  full.names = TRUE
)

# 批量导入、添加日期列并合并
airbnb_combined <- map_dfr(airbnb_files, function(file_path) {
  # 从文件路径中提取父文件夹的日期名称
  date_label <- basename(dirname(file_path))
  
  read_csv(file_path) %>%
    # 添加Date列,值为对应文件夹的日期;.after可选,用于指定列的位置
    mutate(Date = date_label, .after = id)
})

关键步骤说明

  1. 路径提取日期:basename(dirname(file_path))是核心逻辑——dirname()获取文件的父目录路径,basename()提取该路径的最后一段(也就是你需要的日期文件夹名称)。
  2. 高效合并:map_dfr()会自动将每个导入的数据框按行合并(等价于lapply() + bind_rows()),比你之前用的full_join更适合这个场景(full_join会把同id的记录合并成一行,变成宽格式,不利于跨日期对比分析)。
  3. 日期格式转换(可选):如果需要把Date列转为标准日期格式,直接修改mutate语句:
    mutate(Date = as.Date(date_label), .after = id)
    

额外优化建议

  • 用here::here()管理路径,避免硬编码绝对路径,项目移动后无需修改路径:
    library(here)
    data_path <- here("Inside Air BnB Data")
    
  • 大文件场景下,用vroom::vroom()替代read_csv,导入速度提升数倍:
    library(vroom)
    # 将read_csv(file_path)替换为vroom(file_path)
    
  • 添加进度条,方便查看导入进度:
    airbnb_combined <- map_dfr(airbnb_files, function(file_path) {
      # ... 原有代码 ...
    }, .progress = TRUE)
    

内容的提问来源于stack exchange,提问作者Rine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:15:42