r语言如何写入一个excel_R语言—Excel表的高效处理

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-16 22:50   11   0

a37f0ac5e025d38f5aaf217becdad4a9.png

说起Eecel表,让我想起就是一个Excel文件中的各种sheet,有时候sheet数据的更新为了方便,会有分开sheet存储不同时间段的数据,甚至是分开不同的excel文件,在分析数据的时候,要把这么多分散的数据集中在一张sheet似乎是比较让人烦恼的,所以下面就介绍一下如何用R语言高效实现将Excel表的数据批量合并、更新,希望对大家工作有所帮助。

一、合并多个excel文件的表成为一个sheet

举个例子,我们有两个表格,分别是不同人记录的数据,现在我们需要将4个sheet合并成一个sheet。如果表格数量比较少,我们可以采用复制的方式将数据都整理在一个sheet,但如果表格数量太多,每个表格的数据量也很大的时候,这种方式就非常耗时了,下面就用R语言解决这个问题:

0ad4a73567cd4c08774296d1276e8afe.png
需要合并2个excel文件下的共4个sheet
#设置自己路径,且路径中只能有需要合并的excel文件
setwd("C:************")
#查看路径下文件名字
filenames = list.files()
library(readxl)
library(openxlsx)
data2 = data.frame()
#合并多个Excel文件中的多个表成为一个表
for (i in 1:length(filenames)) {
   shtnames = excel_sheets(filenames[i]) # 查询excel文件下各个sheet的名字
   data1 = data.frame()
  for (j in 1:length(shtnames)) {
   data = read.xlsx(filenames[i],sheet = j)
   data$shtn = rep(shtnames[j],dim(data)[1])   #匹配数据对应sheet名称
   data1 = rbind(data1,data)
  }
   data2 = rbind(data2,data1)
}

执行完代码后就可以得到合并后的数据,如果需要导出可以使用write.xlsx()函数

8f00ab445a67eec882f98f9634b09040.png

二、将多个excel文件合并成一个excel文件

比如我们有下面的两个excel文件,现在需要将四个sheet到整合在一个excel表中,如果是一般的excel用户就会点右键选择移动或者复制的功能操作,同样如果是excel文件数量多的话就难办了,继续用R语言来帮助我们解决:

c0928fef6538503abc37003b375236ff.png
将4个sheet都放在一个excel文件
#设置自己路径,且路径中只能有需要合并的excel文件
filenames = list.files('C:***********')
load = paste0('C:***********',filenames)
listA = list()
sheet1=c()
a=1
library(readxl)
library(openxlsx)
library(stringr)
for (i in 1:length(load)) {
   shtnames = excel_sheets(load[i])
   for (j in 1:length(shtnames)) {
      listA[[a]] = read.xlsx(load[i],sheet = j)
      a = a+1
      sheet = paste(str_remove(filenames[i],".xlsx"),shtnames[j],sep = "_") #定义sheet名称
      sheet1=c(sheet1,sheet)
   }
}
names(listA) = sheet1
write.xlsx(listA,"C:**************hb.xlsx")

beeec34d8a232a84f0aa89fb7022643a.png

最后就可以将四个sheet合并,sheet的名称是(原excel名+原sheet名)的组合,避免sheet名重复出错。

三、将多个excel文件(按照同sheet名)合并

有时候面对要将多个excel表合并,且要按照相同的sheet名合并更新,这个如果不会VBA的excel用户,只能乖乖一个个表格对,sheet名相同的数据就粘在一起,想到就难受了。下面就用R语言来处理这种事情,原本可能要10几分钟,现在就几秒的事情。下面是我们的例子:

cc6128c8c1ad3902417e5cbcf16e158c.png
将三个excel文件合并,且sheet名一样的表合并为一个sheet
#设置路径,且路径中只能有需要合并的excel文件
filenames = list.files('C:***********')
load = paste0('C:************',filenames)
listA = list()
sheet=c()
a=1
library(readxl)
library(openxlsx)
library(stringr)
for (i in 1:length(load)) {
   shtnames = excel_sheets(load[i])
   for (j in 1:length(shtnames)) {
      listA[[a]] = read.xlsx(load[i],sheet = j)
      a = a+1
      sheet=c(sheet,shtnames[j])
   }
}
names(listA) = sheet
list1=list()
A = unique(sheet)
for (i in 1:length(A)) {
   list1[[i]] = as.data.frame(do.call(rbind,listA[names(listA)==A[i]]))
}
names(list1) = A
write.xlsx(list1,"C:************对应表合.xlsx")

6857829cf3899252684f5590af4d763e.png

上面介绍的几种情况,如果觉得excel处理用麻烦,不仿试试R语言。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP