彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!

简介: 彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!

利用R语言批量合并Excel

在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动完成类似的工作。

输入文件与背景介绍

假如每个材料(样本)的ID编号是从N001开始依次递增,现在有很多excel表格,第一列是ID信息,之后的每一列代表一个变量(性状、表型),以下用两个表格(多个表格方法同理)举栗子:

image-20230430214258355

细心的朋友肯定发现了ID这一列不是连续的,而且有缺失,也就是说有些样品的数据是空缺的。在统计的时候,需要将空缺值设为NA,有数据的值按位置提取,最终想要如下样式的数据:

> df_out_660
     ID type year name
1  N001    D 2015 小王    # 来自B表
2  N002 <NA>   NA <NA>
3  N003 <NA>   NA <NA>
4  N004 <NA>   NA <NA>
5  N005 <NA>   NA 大壮    # 来自A表
6  N006 <NA>   NA <NA>
7  N007 <NA>   NA <NA>
8  N008    F 2017 小张
9  N009 <NA>   NA <NA>

解决思路与逻辑关系

  • R语言tidyverse、xlsx包
  • 读入样品ID序列信息,用于后续生成结果文件
  • 迭代读取每个子文件,然后进行左连接
  • 对左连接后的数据判断回原有位置看是否为空
  • 若原有位置为空,则替换为新值
  • 保存最终结果

操作步骤

载入R包和数据

library(xlsx)
library(tidyverse)
# 以下示例仅用两个表格
df_info <- read.xlsx("test.xlsx",sheetName = "info",header = T)
df_A <- read.xlsx("test.xlsx",sheetName = "dataA",header = T)
df_B <- read.xlsx("test.xlsx",sheetName = "dataB",header = T)

所有样品的ID序列按顺序保存在df_info中,另外将每个小表格读入,需要保证第一行信息一致。

数据左连接

df_B_out <- left_join(df_sample,df_A,by="ID")
df_A_out <- left_join(df_sample,df_B,by="ID")

分别将原始样品序列表格和每个子表做左连接,类似于excel中的VLOOKUP函数,得到单个结果。

数据汇总与保存

接下来,对连接后的单个结果做合并处理,通过迭代判断每个单元格的值是否为NA,假如空缺的话将下一个子表的该单元格值替换到这里,达到使不同单元格的值都转移到一张总表的效果,通过这种方式可以将不同子表叠放在一起,获得一张大表,然后将结果输出保存。

for (i in 1:nrow(df_B_out)){
      sample <- df_B_out$ID[i]
      print(sample)
      for (m in 4:ncol(df_B_out)){
            phe <- colnames(df_B_out)[m]
            if (is.na(df_B_out[i,m])){
                  if (!is.na(df_A_out[i,m])){
                        df_B_out[i,m] <- df_A_out[i,m]
                  }
            }
      }
}
write.csv(df_B_out,"./all.csv",quote = F,row.names = F)

灵感小记

谢谢你有耐心看到这里,如果上文中的步骤理解起来比较抽象,我用更通俗易懂的方式说明一下:

假如某项工作需要合作完成最后进行汇总,比如你想做一个调查,每个人只调查一小部分。方法是先用A4纸打印出空模板,然后分发给很多人去同时做,每个人可能只需要填其中的指定某几行。

image-20230430222350978

最后,你辛苦的收集起来了很多张A4纸,每张上都记录了某部分信息,现在一个问题困扰着你:怎么把这些东一块西一块的数据快速合并到你最初的A4纸上?

最快的方法是做梦,我梦到我把一大摞A4纸整齐的摞在一起,这时每张A4值的相同单元格处于空间位置的同一维度,只要我大力出奇迹把纸压的特别紧(直到成为二维平面),那么此时我就得到了一张汇总了所有数据的表格(因为不同子表中非空值均被映射到一维状态)

本文就是梦照进现实。

END

© 素材来源于网络,侵权请联系后台删除

笔记合集,点击直达

相关文章
|
2月前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
62 1
|
2月前
|
SQL 数据库连接 数据库
【SQL Server】2. 将数据导入导出到Excel表格当中
【SQL Server】2. 将数据导入导出到Excel表格当中
62 0
|
2月前
|
Java 数据库
SpringBoot定时将数据库表生成Excel表格
SpringBoot定时将数据库表生成Excel表格
46 0
|
13天前
|
Python
Pandas处理日常EXCEL表格的便捷操作
Pandas处理日常EXCEL表格的便捷操作
|
14天前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
16 1
|
2月前
|
文字识别
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
该软件是一款OCR身份证识别工具,能批量处理图片,自动提取身份证信息并导出为Excel。支持百度网盘和腾讯云盘下载。用户界面直观,操作简单,适合新手。识别过程包括:打开图片、一键识别、导出结果。特别注意,此程序仅适用于身份证识别,不适用于其他类型的图片识别。
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
|
1月前
|
SQL 存储 数据可视化
excel表格sql数据库
Excel表格和SQL数据库是两种不同的数据管理工具,它们各自有自己的特点和用途。下面我将分别介绍它们,并探讨它们之间的关系和互操作性。 一、Excel表格 Excel是微软公司推出的一款
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
|
16天前
|
Python
【代码】Python实现Excel数据合并
【代码】Python实现Excel数据合并
16 0
|
24天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在本地用tunnel命令上传excel表格到mc遇到报错: tunnel upload C:\Users***\Desktop\a.xlsx mc里的非分区表名 -s false;该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。