在RStudio中将CSV内容与文件名存入DataFrame的方法
解决方法
核心思路是不按CSV格式解析文件,而是将每个文件当作纯文本读取完整内容,同时关联对应的文件名。
1. 获取目标CSV文件路径
先定位到你的文件所在目录,用list.files()批量获取所有.csv文件的路径:
# 替换成你的文件目录,比如 "./csv_files" file_paths <- list.files(path = "你的文件目录", pattern = "\\.csv$", full.names = TRUE)
2. 批量读取并生成DataFrame
基础R实现
# 初始化空列表存储单文件结果 result_list <- list() for (path in file_paths) { # 读取整个文件的文本内容(多行合并为一个字符串) text_content <- paste(readLines(path), collapse = "\n") # 获取文件名(去掉路径和.csv后缀,要保留后缀就用basename(path)) unique_id <- tools::file_path_sans_ext(basename(path)) # 存入列表 result_list[[path]] <- data.frame(uniqueID = unique_id, text = text_content, stringsAsFactors = FALSE) } # 合并为最终DataFrame df <- do.call(rbind, result_list)
tidyverse简洁实现
如果习惯用tidyverse工具链,可以用更紧凑的代码:
library(tidyverse) df <- tibble(file_path = file_paths) %>% mutate( # 提取文件名(去掉.csv后缀,保留后缀则用basename(file_path)) uniqueID = str_remove(basename(file_path), "\\.csv$"), # 读取完整文本内容 text = map_chr(file_path, ~ paste(readLines(.x), collapse = "\n")) ) %>% select(uniqueID, text) # 调整列顺序为需求的结构
关键细节
readLines()按行读取文件内容,paste(..., collapse = "\n")可以保留原文件的换行结构;如果文件只有一行,直接用readLines(path)[1]更简单。- 若需要保留完整文件名(包含.csv后缀),只需把处理文件名的代码换成
uniqueID = basename(path)即可。 - 绝对不要用
read.csv()这类CSV解析函数,它们会自动按逗号分割内容成多列,这正是你之前遇到的问题。
内容的提问来源于stack exchange,提问作者Pss
相关产品推荐
相关产品推荐

