外贸正品网站,做的物流网站有哪些,企业门户网站建设论文,医院网站建设报价利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题#xff1a;假如有很多个excel表#xff0c;分别存放了一部分数据#xff0c;现在想要快速把这些表格的数据汇总到一起#xff0c;如何用R语言快速完成呢#xff1f;本文分享一个脚本#xff0c;能够自动… 利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题假如有很多个excel表分别存放了一部分数据现在想要快速把这些表格的数据汇总到一起如何用R语言快速完成呢本文分享一个脚本能够自动完成类似的工作。 输入文件与背景介绍 假如每个材料样本的ID编号是从N001开始依次递增现在有很多excel表格第一列是ID信息之后的每一列代表一个变量性状、表型以下用两个表格多个表格方法同理举栗子 image-20230430214258355 细心的朋友肯定发现了ID这一列不是连续的而且有缺失也就是说有些样品的数据是空缺的。在统计的时候需要将空缺值设为NA有数据的值按位置提取最终想要如下样式的数据 df_out_660 ID type year name1 N001 D 2015 小王 # 来自B表2 N002 NA NA NA3 N003 NA NA NA4 N004 NA NA NA5 N005 NA NA 大壮 # 来自A表6 N006 NA NA NA7 N007 NA NA NA8 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,byID)df_A_out - left_join(df_sample,df_B,byID) 分别将原始样品序列表格和每个子表做左连接类似于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值的相同单元格处于空间位置的同一维度只要我大力出奇迹把纸压的特别紧直到成为二维平面那么此时我就得到了一张汇总了所有数据的表格因为不同子表中非空值均被映射到一维状态 本文就是梦照进现实。 本文由 mdnice 多平台发布