R语言批量读取写入Excel数据 r导出输出写入excel多个sheet 导出excel 导入 excel 读入excel 表格多个工作簿批量map

微信公众号:生信小博士单细胞——从降维聚类分群、细胞命名、到批量富集分析,一文打通GSE104154博来霉素小鼠模型单细胞数据

前一段,写过一篇:R语言中写入Excel的不同sheet表格,最近学习了tidyverse的方法,感觉需要总结一下,更新一下知识结构。

本文准备用实际数据,做一下操作:

「批量读取:」

  • 批量读取多个Excel数据
  • 批量读取一个Excel数据的不同表格

「批量写入」

  • 批量写入Excel数据
    • 1,批量写入到不同的Excel中
    • 2,批量写入到一个Excel的不同表格中

1. 模拟数据

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

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

2. 批量读取

2.1 批量读取多个Excel数据

「步骤:」

  • 先把目录下的Excel名称列出来
  • 批量读取
  • 后续操作
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
  • 批量读取
  • 后续操作
name_sheet = 1:8
re2 = map(name_sheet, ~ read.xlsx("../re_hebing.xlsx",sheet=.))
re2

3. 批量写入

3.1 批量写入到不同的Excel中

「步骤:」

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

这里,我们用re的结果:

> 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进行操作:

setwd("../")
sheet_name = names(re)
sheet_name
map2(re,sheet_name,write.xlsx)

结果:

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

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

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再做处理
  • 总之,map函数就是批量操作的,越用越6

> 欢迎关注我的公众号:`育种数据分析之放飞自我`。主要分享R语言,Python,育种数据分析,生物统计,数量遗传学,混合线性模型,GWAS和GS相关的知识。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值