我有结构数据:
- Main_Text
- Sub1_text
- Sub2_text
- 等等(我有几百个子文件夹)
每个子文件夹包含多个 .txt 文件。
我想将所有文件读入 R,以创建一个如下所示的数据框:
文件名 | 文本
文件名 | .txt 文件的内容
我尝试了以下两种方法,但都不太奏效。任何帮助,将不胜感激。
1)使用 readtext 包:虽然这个包应该循环通过子文件夹,但我不能让它这样做。循环遍历 readtext 小插图中的文件的代码应该像这样工作:
dir <- "/Users/Main_Folder"
text = readtext(paste0(dir, "/Main_Text/*.txt"))
这只会产生一个错误:
Error in listMatchingFiles(i, ignoreMissing = ignoreMissing, lastRound = T) : File '' does not exist.
但是,如果我指定子文件夹,它就可以工作,即
text = readtext(paste0(dir, "/Main_Text/Sub1_text*.txt"))
但鉴于我有数百个子文件夹,我需要一个更递归的解决方案。
2)我还尝试了以下两步解决方案,我首先创建文件列表,然后尝试读取文本,这也导致错误:
这会生成我所有文件的准确列表,但显然不包括内容生成步骤:
setwd("/Users/Main_Folder")
dat = basename(list.files(pattern = ".txt$", recursive = TRUE, full.names=TRUE, include.dirs=TRUE))
所以我也试过: mypath="/Users/Main_Folder/" txt_files_ls = list.files(path=mypath, recursive=T, pattern="*.txt")
但是,哪个有效:
txt_files_df <- lapply(txt_files_ls, function(x) {read.table(file = x, header = F, fill=T, sep =",")})
引发错误:
Error in read.table(file = x, header = F, fill = T, sep = ",") : no lines available in input In addition: There were 42 warnings (use warnings() to see them)
如果我指定
header=T
我得到一个不同的错误:
Error in read.table(file = x, header = T, fill = T, sep = ",") : more columns than column names In addition: Warning message: In scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
所以我什至无法使用类似的东西来组合它们的最后一步
combined_df <- do.call("rbind", lapply(txt_files_df, as.data.frame))
我知道为什么会这样,因为文本文件本身没有标题,并且具有随机格式(它们是新闻稿)。这是我的 .txt 文件之一的示例:
cat(readLines("Aderholt_text/Aderholt1-28-11.txt"), sep = "\n")
2011 年 1 月 28 日星期五 联系人:Darrell “DJ” Jordan 202-225-4876 国会议员罗伯特·阿德霍尔特关于阿尔巴尼亚暴力事件的声明 华盛顿特区 - 国会议员罗伯特·阿德霍尔特(阿拉巴马州)今天发布了 th
我确定我遗漏了一些小东西,但是任何人都可以帮助说明如何正确读取文件名+文本,或者使用我尝试过的半工作解决方案之一,或者其他什么?