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

在R中批量加载CSV文件并从文件名生成新变量的优化实现

批量加载CSV并合并的简化方案

不用创建多个中间对象,直接通过单条管道链就能完成所有操作,核心思路是一次性获取所有目标CSV文件路径,读取时同步提取collar_id并合并:

方法一:从子文件夹名称提取collar_id

适用于你的文件结构(每个项圈对应单独子文件夹):

library(tidyverse)

# 一次性读取所有子文件夹下的CSV,自动添加collar_id列
accel_data <- list.files(path = "data/Accel2024",
                         pattern = "\\.csv$",  # 精准匹配CSV文件
                         full.names = TRUE,
                         recursive = TRUE) %>%  # 遍历所有子文件夹
  map_dfr(~ read_csv(.x, skip = 4) %>% 
            mutate(collar_id = basename(dirname(.x))))  # 从父文件夹名提取项圈编号

方法二:从文件名提取collar_id

如果collar_id直接包含在CSV文件名中(比如accel_1305_01.csv),可以用正则提取:

accel_data <- list.files("data/Accel2024", "\\.csv$", full.names = TRUE, recursive = TRUE) %>%
  map_dfr(~ read_csv(.x, skip = 4) %>% 
            mutate(collar_id = str_extract(basename(.x), "\\d{4}")))  # 提取文件名中的4位数字ID

说明

  • list.files(recursive = TRUE)会自动遍历data/Accel2024下的所有子文件夹,无需单独处理每个项圈目录
  • map_dfr会自动把所有读取的表格按行合并成一个tibble
  • 新增的collar_id列直接嵌入合并流程,全程无中间对象生成

最终得到的accel_data结构和你期望的一致:

# 示例结构
data.frame(collar_id = c("1305", "1306"),
           time = c("0615", "0819"),
           x = c(31, 16),
           y = c(-5, 6),
           z = c(6, 5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:03