打开R中给定目录的所有数据集文件

时间:2017-11-13 20:50:57

标签: r lapply

我正在寻找一种更好的方法来一次打开存储库的所有xlsx和csv文件,然后合并它们。这就是我所做的,但正如您将看到的那样,我试图自动化一些手动操作。你能帮我吗?

  1. 定义工作目录

    setwd("~/Desktop/repo/")
    list.files()
    
    [1] "dataset1.csv"      
    [2] "dataset2.csv" 
    [3] "dataset3.csv"    
    [4] "dataset4.csv"        
    [5] "export.xlsx"                              
    [6] "export1.xlsx"                           
    [7] "export2.xlsx"                           
    
  2. 打开所有CSV文件(这部分对我来说似乎没问题,因为每个数据集都会自动打开)

    file.list <- list.files(pattern='*.csv')
    csv_df <- lapply(file.list, read.csv, header=TRUE)
    csv_df <- do.call("rbind", csv_df) #open all csv in a single dataframe
    
  3. 打开所有XLSX文件(这是最丑陋的手动部分)

    df1 <- lapply(excel_sheets("export.xlsx"), read_excel, path = "export.xlsx")
    df2 <- lapply(excel_sheets("export1.xlsx"), read_excel, path = "export(1).xlsx")
    df3 <- lapply(excel_sheets("export2.xlsx"), read_excel, path = "export(2).xlsx")
    df1 <- do.call("rbind", df1)
    df2 <- do.call("rbind", df2)
    df3 <- do.call("rbind", df3)
    xlsx_df <- rbind(df1, df2, df3) #merge all xlsx
    
  4. 合并大数据集中的所有内容

    big_df <- rbind(csv_df, xlsx_df)
    
  5. 有什么建议吗?我该如何改进这个脚本(特别是3.部分)?

2 个答案:

答案 0 :(得分:0)

对于读取.csv文件以外的Excel文件,我建议使用包XLConnect,它可以读取所有类型的Excel文件(.xlsx.xls,{{ 1}})。 我对你的第二部分进行了一些小的修改,这应该有效(假设你的每个.xlsx文件中的所有列名都相同):

.xlsm

如果您无法安装library(XLConnect) list.files() file.list <- list.files(pattern='*.xlsx') xlsx_df <- lapply(file.list, readWorksheetFromFile, header = T) xlsx_df <- do.call("rbind", xlsx_df) 软件包,请尝试安装不需要XLConnect的软件包openxlsx。代码如下:

java

编辑: 要从Excel文件中读取所有工作表:我借用了在此post中创建的函数并将其设为library(openxlsx) list.files() file.list <- list.files(pattern='*.xlsx') xlsx_df <- lapply(file.list, read.xlsx, header = T) xlsx_df <- do.call("rbind", xlsx_df) 版本:

openxlsx

答案 1 :(得分:0)

这是一个很老的帖子,但可能对某些人还是有用的。

您好,我遇到了类似的问题,您对csv文件的“重新绑定”似乎还可以,但是我想建议一个函数来绑定excel文件(帖子的第2步),为此您将需要readxl软件包,它是导入xls和xlsx文件的非常基本的软件包:

library(readxl)
rbind.all.excel<-function(dir,skip){
  file_list <- list.files(dir)
  df <- do.call("rbind",lapply(file_list,FUN=function(files){
    read_excel(files,skip=skip,col_types = "guess")}))
  return(df)
}

然后:

dir<-c("your/target/path")
big.xl<-rbind.all.excel(dir=dir,skip=0)

您已经完成了excel文件