- 从一线收集了两百个文件,要整合到一起?总部一张全国两百个城市的汇总表,拆成两百个小文件?开什么玩笑,难道要复制粘贴到天荒地老。。。
- 不用这么麻烦,一个循环,一个语句,实现快速表拆分和表拼接,从此告别复制粘贴
本节测试数据:链家上海小区测试数据 提取码:9172
上海215个商圈,每个拆分成一个文件,怎么操作?
一、dplyr包之filter操作
#读取文件数据
#install.packages('readr')
library(readr)
file <- readr::read_csv("D:/从0到1学习数据科学/xiaoqu.csv",locale = locale(encoding = "GB18030"))
#提取商圈不同的商圈
biz_circle <- unique(file$xiaoqu_bizcircle)#用dplyr包的filter操作循环拆分数据
#install.packages('dplyr')
library(dplyr)
begin_time <- Sys.time()
for (circle in biz_circle) {#拼接文件名和文件路径file_name = paste(circle,'.csv',sep = '')file_path = paste('D:/从0到1学习数据科学/拆分文件/',file_name,sep = '')#过滤操作,注意%>%为管道符号file_bizcircle <- file %>% filter(xiaoqu_bizcircle == circle)#写文件write_csv(file_bizcircle,file_path)
}
end_time <- Sys.time()#测试一下拆表运行时间
print(end_time - begin_time)
step 1:读取文件,不明之处可看课程 表快速读取
step 2:unique函数获取文件中商圈的不同值
step 3:for循环,循环中的circle为之前unique函数获取到的不同商圈名称
step 4:paste函数拼接文件名以及文件路径名
将字符串拼接,sep表示拼接时的连接符,默认为空格
举例:
输入:file_name = paste('北蔡','.csv',sep = '')
输出file_name:'北蔡.csv'
step 5:filter函数过滤出不同商圈的小区
file %>% filter(xiaoqu_bizcircle == circle)
等价于
filter(file, xiaoqu_bizcircle == circle)
step 6:我们来看下运行结果
step 7:看下总的运行时间,用了0.58秒
一线有200张小表,要拼接成一张大表,怎么操作?
二、rbind操作数据合并
#获取文件夹中的文件名
fileName <- dir('D:/从0到1学习数据科学/拆分文件/')
#拼接文件路径
file_path <- paste('D:/从0到1学习数据科学/拆分文件/',fileName,sep = '')#循环读入
file_conbind <- data_frame()
for (path in file_path) {file_bizcircle <- read_csv(path)#rbind拼接数据file_conbind <- rbind(file_conbind,file_bizcircle)
}
step 1:dir()函数获取文件夹中的所有文件名
step 2:通过paste()函数拼接文件的读取地址
step 3:for循环,path为file_path中的每一个文件地址
step 4:rbind()函数拼接数据,获得最终的结果
结束语:filter和rbind操作使用起来很简单,但它们能解决的问题却很大,工作中经常会需要拆表和合并表操作,如果用复制黏贴,可能需要耗费一天的时间,通过短短的几行代码,就可以在一秒内就处理完所需的工作量。
数据处理课程:
数据采集课程:
有马骏:第0课:一个周末学会R语言数据采集:数据从哪里来?zhuanlan.zhihu.com有马骏:第1课:一个周末学会R语言数据采集:爬虫介绍zhuanlan.zhihu.com有马骏:第2课:一个周末学会R语言数据采集:R爬虫环境安装zhuanlan.zhihu.com有马骏:第3课:一个周末学会R语言数据采集:XPath基础zhuanlan.zhihu.com有马骏:第4课:一个周末学会R语言数据采集: Selenium常用操作zhuanlan.zhihu.com有马骏:第5课:一个周末学会R语言数据采集:正则表达式入门zhuanlan.zhihu.com有马骏:第6课:一个周末学会R语言数据采集:爬取链家小区数据zhuanlan.zhihu.com