0

我有结构数据:

  • 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

我确定我遗漏了一些小东西,但是任何人都可以帮助说明如何正确读取文件名+文本,或者使用我尝试过的半工作解决方案之一,或者其他什么?

4

0 回答 0