首页 > 解决方案 > 快速导入多个 txt 文件,处理空行并在 R 中的表中包含文件名

问题描述

我想计算每个用户的平均喜欢和分享。目前我正在尝试通过将所有数据导入 R 然后计算来做到这一点 - 如果您有其他方法,我很乐意尝试它们。

我有 40,000 个 txt 文件。每个 txt 文件代表一个用户,包括每个帖子、它的喜欢和分享,例如

file        Text               likes      shares
user1.txt   exampletext 1      13         5
            exampletext 2      1          0
user2.txt   othertext1         192        0
            othertext2         11         18
            othertext2         77         5
...

我尝试了两种方法(都来自stackoverflow,到目前为止谢谢!):

setwd('path')
filelist <- list.files()
res <- rbindlist(lapply(dir(pattern = "\\.txt"), fread))

-> 快速,但它不能处理空行,它确实用文件名标记行条目。如果我没有文件名,我无法获得每个用户的平均点赞数和分享数。

setwd('path')
filelist <- list.files()

Results <-  NULL
for (i in filelist){
  i.file <- tryCatch(fread(i,colClasses="NULL", nThread = 4), error=function(e) e)

  if(!class(i.file)[1]=="data.table"){
    i.file <- data.table(cbind(txt.file=i,is.empty="YES",
                               message=i.file$message))
  } else if(nrow(i.file)==0){
    i.file <- data.table(cbind(txt.file=i,is.empty="YES",
                               message=NA))
  } else {
    i.file[,txt.file:=i]
    i.file[,is.empty:="No"]
  }
  Results <- rbind(Results,i.file,fill=TRUE)
  rm(i.file);gc()
}

-> 有效,但速度很慢,需要数周才能完成。

有人可以帮忙吗?谢谢!

标签: r

解决方案


推荐阅读