文件夹下批处理excel-R语言

今天犯了了一个傻,我竟然第一反应要人工处理一堆数据,是这样的,之前别个收集了百度风云榜的榜单值,需要处理一堆excel文件,格式是相似的。但是比较混乱,一个excel文件包含多个sheet,文件名称包含时间大类信息,每个sheet名称是小类,每个sheet的数据格式是类似的,但是包含图片链接以及各种跳格。看到这么一堆数据表,我是懵逼的,打开一张表,吃屎一样的心情,这么一张表一张表的整理,人都不好了。写VB脚本也是可以的,但是不怎么熟练,之前也只是简单处理的时候在网上搜索现成的。这时候,R语言又可以发挥作用了。

处理前示例

这里写图片描述

R程序

在安装xlsx包之前,需要先安装rJava包,rJava包的成功安装需要配置java环境,网上有很多资料。

library("rJava")
install.packages("xlsx")
library(xlsx)
library(stringr)#字符处理
file1<-"F://分类别"#上一级文件路径
works<-list.files(file1)#获取指定路径下的所有文件,这里我的全部是待处理的excel,若夹杂其他的,下面处理时需设定条件
for(m in 1:length(works)){
    file<-paste(file1,"//",works[m],sep="")#拼接单个excel文件路径
    #result<-data.frame()
    wb<-loadWorkbook(file)
    sheets<-length(getSheets(wb))#获取sheet数量
    indexs<-attributes(getSheets(wb))#获取excel文件的sheet属性
    for(i in 1:sheets){
      content<-read.xlsx(file,i,encoding="UTF-8")#获取单个sheet内容
      rows=nrow(content)#获取行数
      for(j in 2:rows){
        rank<-as.numeric(gsub("([\t\n\r search])","",content[j,1]))#将目标字段转化为数值,非数字形式的方便下步过滤
        if(is.na(rank)==TRUE){
          #过滤非数值形式的数据,即干扰数据
        }else{
          ipname=gsub("([\t\n\r search])","",content[j,2])#去除字符串中的各种空格、符号等
          index=gsub("([\t\n\r search])","",content[j,4])
          time_str<-str_extract_all(file,"[0-9]+[0-9]")[[1]][2]#取文件名称中数字(时间)
          updatetime=paste(substr(time_str,1,4),"/",substr(time_str,5,6),"/",substr(time_str,7,8),sep="")#调整时间格式
          Encoding(indexs$names[i])<- "UTF-8"
          type<-iconv(indexs$names[i], "UTF-8", "UTF-8")#获取到的文件sheet名称有编码问题,转化为utf-8格式,正常显示数据
          ip<-data.frame(rank,ipname,index,type,updatetime,works[m])
          #result<-rbind(result,ip)
          write.table(ip,"F://分类别//totals.csv",append=TRUE,col.names=FALSE,row.names = FALSE,sep=",")#边处理边将处理好后的数据写出到外部文件,避免了内存溢出的问题
        }
      }
    }
}

处理后示例

一下就把几十个excel统一处理了,结构如下:
这里写图片描述
看来用R用多了,发现网上可参考的资料还是很少的,学会看说明文档很重要,现在看起比以前顺畅多了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值