【R包荟萃】Excel文件的批量导入与导出:openxlsx包实用技巧

在之前的推送中我们为大家介绍了Excel文件的导入与导出【R语言学习6】R数据导入与导出方法简介,今天主要为大家介绍openxlsx包具体的使用方法。
首先是包的安装与加载,目前该包已经在CRAN平台收录,因此可以参考我们之前分享的方法【R语言学习3】R语言程序包来源与使用方法简介进行安装

    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创建为listwrite.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() # 创建一个空的listsheetname <- 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)

              *部分代码参考安静不安静的博客

              (0)

              相关推荐