[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
解决的问题:需要读取某个大文件夹下所有子文件夹中的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_sub 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(不含数据),免除了后面重新建立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_sub 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)
}
write.xlsx(merge_1,paste("./APP整理",'/merge.xlsx',sep='')
,row.names = F,col.names= F)#得到一个汇总文件,并没有在每个文件夹下保存单独的汇总文件
[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。的更多相关文章
- R语言读取文件
1.R语言读取文件,文件类型为.txt 直接使用read.table()即可,若不知道当前的工作目录,可以使用函数getwd()来查看 2.R语言读取文件,文件类型为.xlsx 方法一:可以把excl ...
- asp.net 遍历文件夹下全部子文件夹并绑定到gridview上
遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 Helper app_Helper = new Helper(); DataSet ds = n ...
- Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹 1.将一个文件夹下的所有内容复制到另一个文件夹下 cp -r /home/packageA/* /home/cp/packageB ...
- 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中
功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...
- C#中获取Excel文件的第一个表名
// 2.以数据库方式打开并输入数据// 此方式将xls文件所在目录看作数据库,其中的xls文件看作数据库表,表名即文件名(不加扩展名).// 函数importExcelTo ...
- 如何在单独的窗口中打开 Excel 文件
如何在单独的窗口中打开 Excel 文件 文章编号:087583 2012/11/1 18:45:29 故障现象: 如何在单独的窗口中打开 Excel 文件? 解决方案: 比较安全的方法就是直 ...
- 使用Dir,遍历文件夹下所有子文件夹及文件
'------------------------------------------- '获取某文件夹下所有文件和子目录下的文件 '--------------------------------- ...
- C#TreeView控件遍历文件夹下所有子文件夹以及文件
一直对递归的理解不深刻,有时候觉得很简单,可是用起来总会出错.这里需要在TreeView控件里显示一个文件夹下的所有目录以及文件,毫无意外的需要用到递归. 一开始,想到用递归写一个生成每一个节点(Tr ...
- R语言读取excel文件的3种方法
R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为 ...
随机推荐
- OpenMPI源码剖析:网络通信原理(二) 如何选择网络协议?
因为比较常用的是 TCP 协议,所以在 opal/mca/btl/tcp/btl_tcp.h 头文件中找到对应的 struct mca_btl_tcp_component_t { mca_btl_ba ...
- FTP地址
访问不了FTP的同学可以试试用IPv6 地址2001:da8:203:ed5:CEB2:55FF:FE8B:ED1来访问,用户名密码不变.
- 2017-2018 第一学期201623班《程序设计与数据结构》-第2&3周作业问题总结
一.作业内容 第二周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK02 第三周作业 作业一定按教学进程中的模板提交 本周学习任务 点评结对同学 ...
- 第二个spring冲刺第6天
今天的进展不多,对代码重新进行了整合,看起了比较简洁
- jieba分词学习
具体项目在githut里面: 应用jieba库分词 1)利用jieba分词来统计词频: 对应文本为我们队伍的介绍:jianjie.txt: 项目名称:碎片 项目描述:制作一个网站,拾起日常碎片,记录生 ...
- 如何用Qt自动拷贝exe依赖的dll
QT生成的.exe文件不能运行的解决办法 之前的数独项目的GUI,当我的Qt项目生成exe时,由于缺少了相关的依赖dll文件,打开会一直报缺少依赖文件的错: 然后一开始我到安装的Qt文件夹里把这些有Q ...
- [转载] Activiti Tenant Id 字段释疑
TENANT_ID_ : 这个字段表示租户ID.可以应对多租户的设计. 转载自: http://www.cnblogs.com/yg_zhang/p/4201288.html http://www. ...
- Oracle18c show pdbs 命令的使用.
解决来源: https://community.oracle.com/thread/4124293 我本机 连接oracle数据库 想看下pdb 结果发现不行 提示内容为: SP2-: The SHO ...
- docker cp 和docker exec 查看docker 运行的容器信息
1. 使用docker 运行 redis 和 postgresql docker run -d -p : -v /redis/data/:/data redis docker run -d -p : ...
- 二叉树的Java实现及特点总结
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...