我正在寻找一种更好的方法来一次打开存储库的所有xlsx和csv文件,然后合并它们。这就是我所做的,但正如您将看到的那样,我试图自动化一些手动操作。你能帮我吗?
定义工作目录
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"
打开所有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
打开所有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
合并大数据集中的所有内容
big_df <- rbind(csv_df, xlsx_df)
有什么建议吗?我该如何改进这个脚本(特别是3.部分)?
答案 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文件