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

递归导入嵌套CSV空气质量数据并添加房屋房间等标识列

解决嵌套CSV文件的信息提取与合并问题

我来帮你搞定这个问题——要从嵌套文件夹和文件名里提取房屋编号、房间名称、月份、年份信息,再和空气质量数据合并成带溯源标识的data.frame,咱们可以用更清晰可靠的步骤实现,避开你之前尝试里的小问题:

完整可运行代码

library(tidyverse)

# 1. 递归获取所有CSV文件的完整路径
filenames <- list.files(pattern = "*.csv", full.names = TRUE, recursive = TRUE)

# 2. 从文件名中精准提取关键标识信息
file_info <- str_match(filenames, "House (\\d+) ([a-z\\s]+) ([A-Za-z]+) (\\d{4})\\.csv") %>%
  as_tibble() %>%
  select(
    houseNum = V2,
    roomName = V3,
    month = V4,
    year = V5
  ) %>%
  # 把房间名称统一为首字母大写格式(可选,按需调整)
  mutate(roomName = str_to_title(roomName))

# 3. 读取CSV并绑定标识列,合并为最终数据框
all_data <- map2_dfr(filenames, seq_along(filenames), function(file, idx) {
  # 读取CSV文件,若你的CSV列名有特殊格式可在此调整参数
  read_csv(file) %>%
    # 添加提取的标识列,放在最前面方便查看
    mutate(
      houseNum = file_info$houseNum[idx],
      roomName = file_info$roomName[idx],
      month = file_info$month[idx],
      year = file_info$year[idx],
      .before = 1
    )
})

# 可选:将月份+年份转换为日期格式,方便后续绘图分析
all_data <- all_data %>%
  mutate(date = as.Date(paste(month, year, "01"), "%B %Y %d"))

代码分步解释

  • 步骤1:list.files递归遍历所有嵌套文件夹,获取每个CSV的完整路径,确保不会遗漏任何文件。
  • 步骤2:用正则表达式直接从文件名提取信息,比依赖文件夹路径更准确:
    • House (\\d+):匹配房屋编号(比如01、02)
    • ([a-z\\s]+):匹配房间名称(比如kitchen、living room)
    • ([A-Za-z]+):匹配月份(比如Apr、December)
    • (\\d{4}):匹配4位年份(比如2019)
      最后整理成规范的列,还可以统一房间名的大小写格式。
  • 步骤3:用map2_dfr同时遍历文件名和索引,读取每个CSV的同时绑定对应的标识列,一步到位合并成大的data.frame,比先存列表再合并更高效。
  • 可选步骤:把月份和年份转成日期格式,方便后续做时间序列绘图、按年月筛选数据等操作。

结果验证

运行代码后,用head(all_data)查看,会得到包含以下列的data.frame:
houseNum, roomName, month, year, date(可选),加上你CSV里的原始监测列(Time、pm2.5、Temp等),完全满足绘图时的数据溯源需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:00:22