前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言批量读取300个Excel表格

R语言批量读取300个Excel表格

作者头像
邓飞
发布2022-05-19 09:24:56
1.4K0
发布2022-05-19 09:24:56
举报
文章被收录于专栏:育种数据分析之放飞自我

大家好,我是飞哥,很多时候,我们需要对Excel进行批量处理,毕竟,没有批量二字,就彰显不出程序员的气质。

比如,我们有300个Excel表格,数据格式类似,我们想对其进行读取,然后合并。

当然,合并包括,行堆积,列对接,根据ID列合并等操作。在R语言都是可以实现的。

还有一个Excel表格,有100个Sheet,想把这100个sheet表读取然后合并。

还有一种情况,是有100个Excel表格,想把其合并到一个Excel中不同的sheet。

虽然,我知道大家的电脑内存很大,但是你这样折腾Excel真的好吗???

多年的工作经验告诉我,永远不要质疑,不要质疑对你提出需求的人,比如我说:“你为什么要把100个Excel表格合并到一个Excel的不同sheet中?电脑能打开吗?你能一个sheet一个sheet的看数据吗?为什么不合并到一个sheet中,然后用数据透视表查看筛选?”然后我就要两件事都要做,还要介绍Excel表如何用筛选功能。

不管怎么说,有需求就有答案。有句歌词写得特别好:“擦干泪,不要问,为什么”。

教程来了

1. 模拟数据

模拟数据的过程很简单,新建一个Excel,里面加点内容,然后复制粘贴,重命名。

❝懂了这么多编程知识,这一步显得不够高科技,但是确实是很直接。❞

2. 批量读取

2.1 批量读取多个Excel数据

「步骤:」

  • 先把目录下的Excel名称列出来
  • 批量读取
  • 后续操作
代码语言:javascript
复制
library(tidyverse)
library(openxlsx)

list_name = dir("./",pattern = ".xlsx")
list_name

re = map(list_name, ~ read.xlsx(.,sheet=1))
re
names(re) = list_name
re
write.xlsx(re,"../re_hebing.xlsx")

目录:

读取结果:

结果文件:

2.2 批量读取一个Excel的不同sheet表格

「步骤:」

  • 共有8个sheet
  • 批量读取
  • 后续操作
代码语言:javascript
复制
name_sheet = 1:8
re2 = map(name_sheet, ~ read.xlsx("../re_hebing.xlsx",sheet=.))
re2

3. 批量写入

3.1 批量写入到不同的Excel中

「步骤:」

  • 内容为list,每个元素为一个data.frame

这里,我们用re的结果:

代码语言:javascript
复制
> str(re)
List of 8
 $ a1.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a2.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a3.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a4.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a5.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a6.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a7.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
 $ a8.xlsx:'data.frame':	4 obs. of  2 variables:
  ..$ ID: num [1:4] 1 2 3 4
  ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681

这里,我们将工作目录设置为上一级,用map2进行操作:

代码语言:javascript
复制
setwd("../")
sheet_name = names(re)
sheet_name
map2(re,sheet_name,write.xlsx)

结果:

3.2 批量写入到同一个Excel中不同sheet表格

这就不用操作,直接写入就行了,一行代码:

代码语言:javascript
复制
write.xlsx(re,"new_new_many_sheets.xlsx")

4. 知识点总结

  • 使用了map和匿名函数进行批量操作 写入多个Excel时,用了map2函数,其实还可以用walk2函数,walk2就不会返回结果到终端了 默认的write.xlsx函数,支持写入list就是多个sheet表格 有时候重命名list更有用,比如写入到不同sheet表格中,名称就是不同sheet表的名称 读取不同sheet表格时,可以用1,2,3表示对应的sheet 另外,如果想把批量读取的Excel进行行合并或者列合并,可以用map_dfc或者map_dfr更简单。当然,后面也可以用map再做处理。

分割线


大家好,我是邓飞,一个持续分享的农业数据分析师

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 育种数据分析之放飞自我 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 模拟数据
  • 2. 批量读取
    • 2.1 批量读取多个Excel数据
      • 2.2 批量读取一个Excel的不同sheet表格
      • 3. 批量写入
        • 3.1 批量写入到不同的Excel中
          • 3.2 批量写入到同一个Excel中不同sheet表格
          • 4. 知识点总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档