如何在R中导入多个.txt文件并生成可用于文本分析的tibble
R批量导入多个TXT文件并生成分析用Tibble
需求说明
需要批量导入多个纯文本TXT文件(每个文件包含多行句子),生成包含文件名和文本内容两列的tibble,方便后续用tidytext包做文本分析(比如用unnest_tokens()拆分单词)。
问题分析
你之前的代码存在两个核心问题:
- 错误使用表格类读取函数(
read_table2/read.delim):这类函数默认按分隔符解析数据,但你的TXT是纯文本句子,没有制表符/分隔符,导致读取格式混乱,无法完整加载内容。 - 循环代码变量错误:循环中使用了未定义的
fileList变量,且同样用了不适合纯文本的read.delim,导致生成的列表结构不符合tibble转换要求。
正确解决方案
方法1:Tidyverse风格推荐写法
使用purrr批量读取,结合read_lines处理纯文本,直接生成标准tibble:
# 加载所需包 library(tidyverse) # 获取当前目录下所有TXT文件(带完整路径避免读取失败) files <- list.files(pattern = "\\.txt$", full.names = TRUE) # 批量读取并生成tibble text_data <- files %>% set_names(basename(.)) %>% # 仅保留文件名(去掉路径) map_df(~tibble(text = read_lines(.x)), .id = "FileName")
生成的tibble结构示例:
| FileName | text |
|---|---|
| file1.txt | On Monday, I went to the park. |
| file1.txt | I met my friend there. |
| file2.txt | The weather was sunny today. |
方法2:基础R循环写法
如果习惯用基础R实现,可参考以下代码:
# 获取TXT文件列表 files <- list.files(pattern = "\\.txt$") # 初始化列表存储数据 text_list <- list() # 循环读取每个文件 for (i in seq_along(files)) { # 读取文件所有行 line_content <- readLines(files[i]) # 生成带文件名的数据框 text_list[[i]] <- data.frame( FileName = files[i], text = line_content, stringsAsFactors = FALSE ) } # 合并为tibble text_data <- do.call(rbind, text_list) %>% as_tibble()
后续文本分析示例
生成tibble后,可直接用tidytext包拆分单词:
library(tidytext) text_data %>% unnest_tokens(word, text) %>% count(FileName, word, sort = TRUE)
内容的提问来源于stack exchange,提问作者Jedo0w0
相关产品推荐
相关产品推荐

