解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹;2.该条数据来源于哪个excel文件。最终,按照子文件夹单独保存汇总文件,或者只保存成一个汇总文件。

场景描述:抓取了各个APP的使用数据,分散地保存在各个文件夹中。文件格式如下:

  • 第一级分类:文件夹名

  • 第二级分类:文件夹下xlsx文件名

  • 第三级分类:每个xlsx文件中每行(具体的每条数据),但其中并没有该APP属于的二级分类和一级分类,需要为每条数据添加二级分类和一级分类,并最终汇总到一个文件中。

解决方法一:

#作用:读取每个文件夹下的excel,并将其合并成一个文件。
#共有3级:第一级:文件夹名,第二级:文件夹中的xlsx文件名,第三级:xlsx文件中的每行#代码后面注释中若有:【修改】字样,则表示如果要在你机器上运行该段代码时,需要进行相应的修改。##########方法一:最终单独保存在每个文件夹下
rm(list=ls())
setwd("E:/cnblogs")                                    #设定工作目录【修改】library(xlsx)first_category_name = list.files("APP整理")            #list.files命令得到"APP整理”文件夹下所有文件夹的名称【修改】
dir = paste("./APP整理/",first_category_name,sep="")   #用paste命令构建路径变量dir,第一级目录的详细路径【修改】
n = length(dir)                                       #读取dir长度,也就是:总共有多少个一级目录                                                     n_sub<-rep(0,n)
n_sub<-as.data.frame(n_sub)
n_sub<-t(n_sub)
head(n_sub)                                          #n_sub是每个一级目录(文件夹)下有多少个文件,也就是:有多少个二级目录,初始化为0,用于后面的操作##########
for(i in 1:n){         #对于每个一级目录(文件夹)b=list.files(dir[i]) #b是列出每个一级目录(文件夹)中每个xlsx文件的名称n_sub[i]=length(b)   #得到一级目录(文件夹)下xlsx的文件个数:n_submerge_1<-read.xlsx("E:/cnblogs/APP整理/xlsx文件样例.xlsx",sheetIndex=1,encoding='UTF-8')#dim(merge_1)names(merge_1)<-c('序号','APP','2016-01-11','2016-01-12','2016-01-13','2016-01-14','2016-01-15','2016-01-16','2016-01-17')#我的文件列名,根据你具体情况修改【修改】merge_1$second_category<-'second_category'merge_1$first_category<-'first_category'merge_1<-merge_1[1,-1]    #这一段的目的是读取一个xlsx文件样例,得到一个初始的dataframe(不含数据),免除了后面重新建立datafram的麻烦,用于后面文件的rbind拼接for(j in 1:n_sub[i]){     #对于每个一级目录(文件夹)下的每个xlsx文件new_1<-read.xlsx(file=paste(dir[i],'/',b[j],sep=''),sheetIndex=1,encoding='UTF-8') #读取xlsx文件names(new_1)<-c('序号','APP','2016-01-11','2016-01-12','2016-01-13','2016-01-14','2016-01-15','2016-01-16','2016-01-17')【修改】new_1<-new_1[-1,-1]     #因为实际数据需要,删除第一行和第一列(根据实际读取xlsx文件的情况进行修改)new_1$second_category<-substr(b[j],1,4)        #二级目录的名称是xlsx的文件名。new_1$first_category<-first_category_name[i]   #一级目录的名称是“文件夹名”merge_1<-rbind(merge_1,new_1)}write.xlsx(merge_1,paste(dir[i],'/merge.xlsx',sep=''),row.names = F,col.names= F)#单独保存在每个文件夹下
}

解决方法二:

##########方法二:最终得到一个汇总的xlsx文件,在每个文件夹下并没有保存单独的合并文件
rm(list=ls())
setwd("E:cnblogs")      #设定工作目录【修改】library(xlsx)first_category_name = list.files("APP整理")            #list.files命令得到"APP整理"文件夹下所有文件夹的名称
dir = paste("./APP整理/",first_category_name,sep="")   #用paste命令构建路径变量dir,第一级目录的详细路径
n = length(dir)                                        #读取dir长度,也就是:总共有多少个一级目录                                                     n_sub<-rep(0,n)
n_sub<-as.data.frame(n_sub)
n_sub<-t(n_sub)
head(n_sub)        #n_sub是每个一级目录(文件夹)下有多少个文件,也就是:有多少个二级目录,初始化为0,用于后面的操作merge_1<-read.xlsx("E:/cnblogs/APP整理/xlsx文件样例.xlsx",sheetIndex=1,encoding='UTF-8')
dim(merge_1)
names(merge_1)<-c('序号','APP','2016-01-11','2016-01-12','2016-01-13','2016-01-14','2016-01-15','2016-01-16','2016-01-17')#我的文件的列名【修改】
merge_1$second_category<-'second_category'
merge_1$first_category<-'first_category'
merge_1<-merge_1[1,-1]    #这一段的目的是读取一个xlsx文件样例,得到一个初始的dataframe(不含数据),免除了后面重新建立一个dataframe的麻烦,用于后面文件的rbind拼接for(i in 1:n){         #对于每个一级目录(文件夹)b=list.files(dir[i]) #b是列出每个一级目录(文件夹)中每个xlsx文件的名称n_sub[i]=length(b)   #得到一级目录(文件夹)下xlsx的文件个数:n_subfor(j in 1:n_sub[i]){     #对于每个一级目录(文件夹)下的每个xlsx文件new_1<-read.xlsx(file=paste(dir[i],'/',b[j],sep=''),sheetIndex=1,encoding='UTF-8') #读取xlsx文件names(new_1)<-c('序号','APP','2016-01-11','2016-01-12','2016-01-13','2016-01-14','2016-01-15','2016-01-16','2016-01-17')#我的文件的文件名【修改】new_1<-new_1[-1,-1]     #因为实际数据需要,删除第一行和第一列(根据实际读取xlsx文件的情况进行修改)new_1$second_category<-substr(b[j],1,4)        #二级目录的名称是xlsx的文件名。new_1$first_category<-first_category_name[i]   #一级目录的名称是“文件夹名”merge_1<-rbind(merge_1,new_1)}# write.xlsx(merge_1,paste(dir[i],'/merge.xlsx',sep=''),row.names = F,col.names= F)
}
write.xlsx(merge_1,paste("./APP整理",'/merge.xlsx',sep=''),row.names = F,col.names= F)#得到一个汇总文件,并没有在每个文件夹下保存单独的汇总文件

  

转载于:https://www.cnblogs.com/lzllovesyl/p/5170032.html

[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。相关推荐

  1. abaqus python 读取文件_通过Python脚本从Abaqus中的excel文件导入幅度数据

    我在从excel文件导入幅度数据时在Abaqus中创建了以下宏.然后尝试运行此脚本以从同一个excel文件创建另一个幅度但不幸的是,我有以下错误.在这方面有人可以帮助我吗? 脚本: # Do not ...

  2. r读取文件夹下的所有csv文件_[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。...

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  3. c语言 遍历文件夹中所有文件名,C# 遍历文件夹下所有子文件夹中的文件,得到文件名...

    假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中 using System.Data; using System.Drawing; using System.Linq; using ...

  4. r语言读取excel数据_R语言 | 更快的表格文件读取方法!

    友情提示:蓝色下划线字体为引文,请保持警惕! 使用R语言读取 Affymetrix Human Exon 1.0 ST Array 芯片平台探针注释文件: https://www.affymetrix ...

  5. R语言 读取csv文件 有关无法打开表格以及表格位置不对问题【已解决】

    因为概率模型课程,刚开始用到R语言,遇到些问题,现已解决 问题1:  R语言读取并导入csv文件时打不出表格 解决: 首先用getwd()获取R当前所在的工作目录,将csv文件与R的code文件放在同 ...

  6. R语言读取csv文件,第一列列名出现乱码怎么办

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/weixin_45075290/art ...

  7. R语言读取excel文件实战(read.xlsx函数、read_excel函数、read.xlsx函数、Write函数)

    R语言读取excel文件实战(read.xlsx函数.read_excel函数.read.xlsx函数.Write函数) 目录 R语言读取excel文件实战(read.xlsx函数.read_exce ...

  8. R语言读取xlsx文件

    R语言读取csv文件 关于R语言读取Excel文件,比较麻烦,我从来都反对直接读取xlsx文件,因为爬虫数据时,一般保存的格式都是csv文件,或者直接保存到数据库里面,没有谁会保存到Excel文件里面 ...

  9. R语言读取csv文件,第一列列名出现乱码的解决方法

    在利用R语言读取csv文件时,第一列列名总是出现乱码,代码如下: setwd("E:\2.Model\4. Simulation") #设定文件路径 All.Soils = rea ...

  10. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

最新文章

  1. 锁定计算机好在下游戏吗,巧用win7锁定计算机 防止孩子沉迷游戏
  2. 通过HTTP协议实现多线程下载
  3. 软件工程—团队作业1
  4. 服务器安装三节点RabbitMQ集群(4)
  5. Python+turtle交互式绘图:可以用鼠标拖动的小海龟
  6. 使用Spark Shell开发运行Spark程序
  7. 虽然保持了连续代码生产量但是仔细想想也没什么必要
  8. xshell和xftp免费版官方(家庭、学校版)下载
  9. 布线工程-认识光纤和光缆
  10. VC++ 查看系统进程,获取进程关联的DLL列表
  11. UNI-APP实现扫描二维码
  12. 拼装机器人感想_机器人实验心得体会
  13. 一个全网最详细 Python 教程,不信你来学一学!
  14. JS,两种在页面加载完成后自动执行的方法(ready,onload)
  15. 论文笔记(二):基于卷积神经网络的高分辨率遥感图像上的水体识别技术
  16. 较为简洁明了的KMP算法解释
  17. 简练网软考知识点整理-项目整体绩效测量基准
  18. 【SQL开发实战技巧】系列(十六):数据仓库中时间类型操作(初级)日、月、年、时、分、秒之差及时间间隔计算
  19. 单元测试之mock使用
  20. windows自带便笺使用

热门文章

  1. 今天有人问,为何汝粉丝这么少?
  2. C中使用汇编交换两个值
  3. 解决办法:一切都正确,Python3执行PyImport_Import()一直返回NULL
  4. 博客V7之后,喜庆排名进入2000之内
  5. 管理感悟:图省事就是把别人当白痴
  6. 所有自然数相加的和是-1/12,你信吗?
  7. 肥城市c语言入门自学零基础,2019年自考C语言程序设计模拟试题十三答案.doc
  8. python自定义损失函数_自定义损失函数sklearn
  9. 关于预编译和宏定义部分说明
  10. 【315天】每日项目总结系列053(2017.12.17)