彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!
利用R语言脚本实现批量合并Excel表格
在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动完成类似的工作。
输入文件与背景介绍
假如每个材料(样本)的ID编号是从N001开始依次递增,现在有很多excel表格,第一列是ID信息,之后的每一列代表一个变量(性状、表型),以下用两个表格(多个表格方法同理)举栗子:
细心的朋友肯定发现了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纸打印出空模板,然后分发给很多人去同时做,每个人可能只需要填其中的指定某几行。
最后,你辛苦的收集起来了很多张A4纸,每张上都记录了某部分信息,现在一个问题困扰着你:怎么把这些东一块西一块的数据快速合并到你最初的A4纸上?最快的方法是做梦,我梦到我把一大摞A4纸整齐的摞在一起,这时每张A4值的相同单元格处于空间位置的同一维度,只要我大力出奇迹把纸压的特别紧(直到成为二维平面),那么此时我就得到了一张汇总了所有数据的表格(因为不同子表中非空值均被映射到一维状态)
本文就是梦照进现实。
本文由 mdnice 多平台发布
相关文章:
彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!
利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动…...
深入学习MYSQL-数据操纵及视图
前言 本博客中的例子和文字大部分来源于书籍《mysql必会知识》,后续会根据更多的书籍不断完善此笔记。 插入操作 可以这种方式向数据库插入两条数据,mysql和pg都支持这种写法。在实战中我们应该更多的使用这种写法,因为数据库的批量操作会…...
深入讲解eMMC简介
1 eMMC是什么 eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡,是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。它是对MMC的一个拓展࿰…...
ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元
近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…...
PointNet:利用深度学习对点云进行3D分类和语义分割
PointNet:利用深度学习对点云进行3D分类和语义分割 参考自,PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 代码仓库地址为:https://github.com/charlesq34/pointnet/ 介绍 这次介绍的是一个比较基础的工作…...
第四十二章 Unity 下拉框 (Dropdown) UI
本章节我们介绍下拉框 (Dropdown),我们点击菜单栏“GameObject”->“UI”->“Dropdown”,然后调整它的位置,效果如下 其实它的本质就是一个下拉列表,然后选择列表中的一个选项而已。大家在很多网页中应该可以看到类似的UI元…...
STL常用梳理——STACK、QUEUE
STL——适配器篇 1、ListSTL list 容器介绍list使用 2、适配器介绍3、Deque容器Stack、Queue适配器实现 1、List STL list 容器介绍 STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可…...
Unity物理系统基本概念
前言:物理引擎仅仅是对现实物理的一种近似模拟。无论是从运算精度和时间连续性都不够准确。目的只是为了让游戏具备令人信服的物理表现,增强游戏的表现力和用户的沉浸感。 一、刚体Rigidbody 刚体是让物体产生物理行为的主要组件。一旦挂载了Rigidbody组…...
防止表单重复提交的几种方式,演示一个自定义注解方式的实现
防止表单重复提交的几种方式,演示一个自定义注解方式的实现 一、防止表单重复提交的几种方式方式一:Token 机制方式二:去重表(主要是利用 MySQL 的唯一索引机制来实现的)方式三:Redis 的 setnx方式四&#…...
《基于智能手机采集的PPG信号预测血管老化》阅读笔记
目录 一、论文摘要 二、论文十问 Q1: Q1论文试图解决什么问题? Q2: 这是否是一个新的问题? Q3: 这篇文章要验证一个什么科学假设? Q4: 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?…...
【大数据-调度工具】dolphinscheduler安装和遇到的问题
1.安装 安装步骤按照官网安装即可 官网:DolphinScheduler | 文档中心 (apache.org) 版本:3.1.5 2.踩坑记录 Q1.大文件无法上传 问题描述: 在资源中心中上传文件选择完大文件夹之后,选择确认之后确认按钮转了几圈圈之后就没…...
滑动轨迹生成的思路和代码分享-测试可过极验 90%机率
如有技术侵权、可联系本人下架 由于极验采用人工智能的方式对滑动的轨迹进行的验证,因此如果我们比较随意的生成鼠标滑动轨迹基本是肯定被封的,因此我们要详细分析一下鼠标轨迹的规律, 通之前介绍的调试手段,手工滑动滑块,获取到鼠标滑动轨迹的集合数组如下: [[-37,-41…...
【Linux】项目自动化构建工具make/makefile
🏖️作者:malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、make/makefile的背景二、…...
【系分范文】论软件需求获取技术以及应用
目录 论题论题介绍论文要点理论素材准备范文摘要正文论题 论软件需求获取技术以及应用 论题介绍 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。软件需求获取是一个确定和理解不同的项目干系人的需求和约束的过程。需求获取是否科学、准备充分,对获取…...
vue2.0中post请求
vue2.0中post请求 三种格式:在vue中axois的用法:1、 multipart/form-data类型2、 x-www-form-urlencoded类型3、 application/json类型 三种格式: ○ Content-Type:x-www-form-urlencoded ○ Content-Type:multipart/form-data ○ Content…...
MySQL双写缓冲区(Doublewrite Buffer)
本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 摘要为什么需要Doublewrite BufferDoublewrite Buffer原理Doublewrite Buffer相关参数总结 摘要 InnoDB是MySQL中一种常用的事务性存储引擎,它具有很多优秀的特性。其中,Dou…...
免费开源的Umi-OCR 文字识别工具
大家好,我是小寻,欢迎关注公众号:工具优选,免费领取优质项目源码和常用工具,还可以加入我的交流群! 如今,在日常生活和工作中,我们经常需要捕捉屏幕截图并识别其中的文本信息。比如别人给你发资料时直接发…...
如何让微信小程序弹窗滚动条设置在最上面
最近发现一个事情搞得很烦,微信小程序的弹窗内容可以滚动的时候,要保证每一次打开都在最上面,研究了一下终于发现了怎么解决 第一步 首先得把你的弹窗里面的内容用scroll-view标签包起来,像这样 <scroll-view style"hei…...
c语言-指针
指针详解 这段时间在看 Linux内核,深觉C语言功底不扎实,很多代码都看不太懂,深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组&…...
Jenkins集成SonarQube实现代码质量检查
文章目录 一、前提配置1.1 安装及配置SonarQube Scanner插件1.2 配置SonarQube servers 二、非流水线集成SonarQube1.1 配置非流水线任务 三、流水线集成SonarQube 一、前提配置 1.1 安装及配置SonarQube Scanner插件 (1) 点击【系统管理】>【插件管理】>【可选插件】搜…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
