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

在R中读取CSV文件时为数据框添加文件名与文件夹名列的方法

问题解决:给CSV数据添加文件名和文件夹名列

你的代码问题分析

  • 赋值df$filename <- myfiles时,你把所有文件的路径列表赋值给了当前文件的每一行,而非单个文件名
  • 完全缺少提取并添加文件夹名的逻辑

修正后的基础循环代码

# 指定目标文件夹路径
mydir <- "C:/Users/Administrator/Downloads/Data/Device 1 - Bin 4 - LongTube"
# 分别获取文件完整路径和仅文件名
myfiles_full <- list.files(path = mydir, full.names = TRUE)
myfiles_names <- list.files(path = mydir, full.names = FALSE)

# 创建空列表存储处理后的数据集
datalist <- list()

# 遍历每个文件
for (i in seq_along(myfiles_full)) {
  # 读取当前CSV文件
  df <- read.csv(myfiles_full[i], header = TRUE)
  
  # 添加"文件名"列:取当前文件的纯文件名
  df$filename <- myfiles_names[i]
  # 添加"文件夹名"列:提取路径最后一级的文件夹名称
  df$foldername <- basename(mydir)
  
  # 将处理好的数据框存入列表
  datalist[[i]] <- df
}

# 可选:把所有数据框合并成一个大的数据集
combined_df <- do.call(rbind, datalist)

更简洁的tidyverse实现(推荐)

如果你熟悉tidyverse工具包,以下代码可一步完成读取、添加列和合并:

library(tidyverse)

mydir <- "C:/Users/Administrator/Downloads/Data/Device 1 - Bin 4 - LongTube"

# 读取所有文件、添加列并合并
combined_df <- list.files(path = mydir, full.names = TRUE) %>%
  map_dfr(function(file) {
    read.csv(file, header = TRUE) %>%
      mutate(
        filename = basename(file),  # 从完整路径提取纯文件名
        foldername = basename(mydir)  # 提取目标文件夹名称
      )
  })

关键说明

  • basename()函数可从完整路径中提取最后一级名称(文件或文件夹),避免手动写死名称,提升代码灵活性
  • 循环时用索引i对应单个文件,确保每个数据框只关联自己的文件名
  • map_dfr会自动将多个数据框按行合并,省去手动调用do.call(rbind, ...)的步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:22:52