使用R将数千个单个XML导入1个大型CSV

时间:2017-03-20 14:36:00

标签: r xml

我正在尝试使用R将数千个单个XML文件导入到一个数据集中,其中每一行只是该xml文件的文本。

目前我正在使用:

    file_list <- list.files()

    for (file in file_list){

      # if the merged dataset doesn't exist, create it
      if (!exists("dataset")){
        dataset <- read.table(file, header=FALSE, stringsAsFactors=FALSE, 
     sep="\t") 
        }  
      # if the merged dataset does exist, append to it
     if (exists("dataset")){
        temp_dataset <-read.table(file, header=FALSE,   
 stringsAsFactors=FALSE, sep="\t")
dataset<-rbind(dataset, temp_dataset)
rm(temp_dataset)
  }}

这似乎有效但我知道必须有更好的方法将XML文件放入单个大型XML或CSV文件中。我们非常感谢任何指向正确方向的指示

1 个答案:

答案 0 :(得分:1)

几个月前我做了一些正常工作的事情:

require("data.table")

# files path
setwd("path/to/your_data") 

# list containing your file names
file_list = list.files() 

# read data and save in a list
mydata <- lapply(file_list, read.table, header = FALSE, sep = "\t") 
mydata <- rbindlist(mydata) # merge list to one data frame

但是,如果遇到性能问题,您甚至可以将该过程并行化:

# reading data in parallel cores

require(parallel)

no_cores <- detectCores()
cl <- makeCluster(no_cores)
clusterEvalQ(cl, {library("parallel")}) # install dependencies in cores
clusterExport(cl=cl, varlist=c("file_list")) # global variables
mydata <- parLapply(cl, file_list, read.table, header = FALSE, sep = '\t') 
mydata <- rbindlist(mydata) # merge list to one data frame

取决于您的机器拥有的核心数量,它可以快x倍;)