【R包荟萃】Excel文件的批量导入与导出:openxlsx包实用技巧
install.packages("openxlsx")
library("openxlsx")
导出excel文件
导出excel文件使用的是write.xlsx函数,通过介绍我们可以看到该函数主要是将数据框导出为xlsx文件,同时由于excel可存在多个sheet,该函数也支持导出a list of data.frames。
因此命令如下:
l <- list("IRIS" = iris, "MTCARS" = mtcars) # 将R内置数据集iris和mtcars创建为list
write.xlsx(l, "writeList.xlsx") #excel文件导出在该目录下并命名为writeList.xlsx
# 要导出单个文件时,直接write.xlsx(变量名称,“保存位置与文件名")即可
可以看到最后导出的excel存在IRIS和MTCARS两个sheet
导入excel文件
文件的导入是使用read.xlsx函数,使用的方法也非常简单,主要设置excel的文件位置以及sheet名称或顺序(如果存在多个sheet)
比如导入我们刚刚创建的excel文件中的第一个sheet,则命令为
iris <- read.xlsx(xlsxFile = "writeList.xlsx", sheet = 1)
# 或者
iris <- read.xlsx(xlsxFile = "writeList.xlsx", sheet = "IRIS")
批量导入excel文件中的多个sheet
上述命令只能导入excel的一个sheet,在实际过程中可能需要一次性导入多个sheet,则可以使用循环函数实现:
data.list <- list() # 创建一个空的list
sheetname <- getSheetNames("writeList.xlsx") #使用getSheetNames函数获取excel文件的sheet名称
for(i in 1:length(sheetname)){
data.list[[i]]<-read.xlsx("writeList.xlsx",sheet=i) # 循环读取excel文件的每个sheet
names(data.list)[i] <- sheetname[i] #将data.list的每个文件名命名为每个sheet的名字
}
批量导入多个excel文件
有时需要将目录下的多个文件一次性导入R中,则可以使用如下命令实现,但是需注意的是该命令只支持每个excel只有一个sheet
myexcelfile = list.files(pattern="*.xlsx") # list.files函数中用正则表达式匹配文件名的一个选项
list2env(
lapply(setNames(myexcelfile, make.names(gsub("*.xlsx$", "", myexcelfile))),
read.xlsx), envir = .GlobalEnv) #匹配以.xlsx结尾的文件名,将其替换为空,也就是去掉.xlsx,只留文件名作为变量名
批量导入多个txt或者excel文件
同理我们可以利用该命令批量导入csv或者txt文档
mytxtfile = list.files(pattern="*.txt") # 生成.txt文件的列表
list2env(
lapply(setNames(mytxtfile, make.names(gsub("*.txt$", "", mytxtfile))),
read.table,header=TRUE,sep="\t"), envir = .GlobalEnv)
mycsvfile = list.files(pattern="*.csv") # 生成.csv文件的列表
list2env(
lapply(setNames(mycsvfile, make.names(gsub("*.csv$", "", mycsvfile))),
read.csv,header=TRUE,check.names=FALSE), envir = .GlobalEnv)
*部分代码参考安静不安静的博客