我有结构数据:
每个子文件夹容纳多个.txt文件。
我想将所有文件读入R,以创建如下所示的数据框:
文件名|文本
文件名| .txt文件的内容
我尝试了以下两种方法,但两种方法都不行。任何帮助将不胜感激。
1)使用readtext包:虽然这个包应该循环遍历子文件夹,但我无法做到这一点。循环遍历readtext vignette中文件的代码应该如下:
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中= “/用户/ 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国会议员罗伯特·阿德霍尔特关于阿尔巴尼亚暴力事件的声明华盛顿特区 - 国会议员罗伯特·阿德霍尔特(R-Alabama)今天发布了
我确定我错过了一些小东西,但任何人都可以帮助说明如何正确阅读文件名+文本,或者使用我尝试过的半工作解决方案之一,还是别的什么?