c fscanf 按行读取文件_【R语言】批量读取Excel数据并合并(升级版)

bcf1c5130347d23221ce675f85c231c9.png

我之前写过一篇批量读取Excel数据的,代码比较原始和啰嗦:

张敬信:【Matlab/R语言】批量读入Excel文件​zhuanlan.zhihu.com
098fb853b6367ea0bb8f78ef961bc72f.png

近年来,R语言技术突飞猛进,再来一篇更简洁高级的。

批量读取并合并,道理很简单,总共分三步:

(1) 获取批量数据文件的路径

(2) 循环机制批量读取

(3) 合并成一个数据文件

强大的purrr包+管道,使得后两步可以同时做,或者一气呵成。

载入R包:

library

以xlsx文件为例,如果是xls文件,改用read_xls()函数即可,或者不区分,直接用read_excel()也行。

将合并后的数据写出到 Excel :

write_xlsx

一. 多个数据表列名相同

这是最常见的情形,读取+按行堆叠合并,即可得到总的数据表。再分两种情况讨论:

  1. 数据在多个工作簿(即多个xlsx文件)

比如,在datas文件夹下有3个xlsx文件,每个文件的列名都是相同的:

ee55af455d425281af57747244f5ab9e.png

7e3e1cf050c8f554877414d765270e01.png
files 

1ab3f1d9edabcf6e2877b03d9d67b23a.png

注1:数据文件名可以随便,不需要规律命名。

注2:数据文件甚至可以嵌套多层文件夹,只需要设置参数 recursive = TRUE.

2. 数据在一个工作簿的多个工作表(1个xlsx文件,包含多个sheet)

还是上述数据,只是都在 “1-3月提奖额.xlsx ”中:

c19b7ebb74c8f1798c9a863bf696a1ec.png
path 

结果同上。

注:同样,各个sheet可以随便起名,不需要规律命名。

二. 多个数据表列名不同

都是同样的批量读取,但合并时不能只是简单的按行堆叠,而是需要做数据连接(join),得到总的数据表。也分两种情况讨论:

  1. 数据在多个工作簿(即多个xlsx文件)

比如,datas 文件夹下有3个xlsx文件:

864f896c3feb3f652e3aa0410702cdeb.png

dc00e0a94fa311c7c14fc597374c4d96.png

324debb93367a15ab578c16757e37c2c.png

daa14ded723c86defc9a58c5c80594dc.png

注意,3个数据表中的人名是有重复的,所以不能简单按行堆叠。

实际上,这是将所有信息都合并到一起,即做全连接。又因为是多表依次做连接,再结合 reduce() 就能实现。

files 

9ac4d0c021279db9b4fc00d94563d85e.png

2. 数据在一个工作簿的多个工作表(1个xlsx文件,包含多个sheet)

还是上述数据,只是都在 “3-5月业绩.xlsx ”中:

f00d0d9baadc7c80e35748e0e27bdd6f.png
path 

结果同上。

————————————

原创作品,转载请注明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值