从文件夹中读取文件并将其存储到R中的数据框中

时间:2017-10-24 17:05:41

标签: r text input import

我的目标最终是建立一个分类器 - 类似垃圾邮件检测器。

我不确定如何阅读包含将提供分类器并将其存储到数据帧的文本的文本文件。

假设我已经组装了文件夹文本文件 - 原始文本最初存储在记事本中,然后从txt文件中保存 - 其名称表示其内容,例如xx_xx_xx__yyyyyyyyyyy_zzzzz,其中xx将是表示日期的数字,yyyyyyyyy将是表示主题的字符串,zzzz将是表示源的字符串。 yyyyyyyyyyy和zzzzzzz的长度各不相同。

我的目标是创建一个循环文件​​,读取它们,将其名称中包含的信息存储在数据框的单独列中的函数 - 例如。 “日期”,“主题”,“来源” - 以及第四栏中的文字内容(例如“内容”)。

有关如何实现这一目标的任何想法?

您的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

嗨,这是一个可能的答案,我将结果存储在列表而不是数据框中,但您可以使用do.call(rbind.data.frame,result)将结果从一个转换为另一个

require(stringr)
datawd<-"C:/my/path/to/folder/" # your data directory
listoffiles<-list.files(str_c(datawd)) # list of files
listoffiles<-listoffiles[grep(".txt",listoffiles)] # only extract .txt files
my_paths<-str_c(datawd,listoffiles) # vector of path
# the following works with windows only
progress<-winProgressBar(title = "loading text files",
        label = "progression %",
        min = 0,
        max = length(my_paths), 
        initial = 0,
        width = 400)
#000000000000000000000000000000000000000 loop
for (i in 1:length(chemins)){
    result<-list()
  setWinProgressBar(progress,i,label=listoffiles[i])
  the_date<-sapply(strsplit(listoffiles[i],"_"),"[[",1)
  the_theme<-sapply(strsplit(listoffiles[i],"_"),"[[",2)
  the_source<-sapply(strsplit(listoffiles[i],"_"),"[[",3)

# open connexion with read
    con  <- file(my_paths[i], open = "r")
# readlines returns an element per line, here I'm concatenating all, 
 #you will do what you need....
    the_text<- str_c(readLines(con,warn = FALSE))
    close(con) # closing the connexion
  result[[i]]<-list()
  result[[i]]["date"]<-the_date
  result[[i]]["source"]<-the_source
  result[[i]]["theme"]<-the_theme
  result[[i]]["text"]<-the_text
    }
#000000000000000000000000000000000000000 end loop