• 从一线收集了两百个文件,要整合到一起?总部一张全国两百个城市的汇总表,拆成两百个小文件?开什么玩笑,难道要复制粘贴到天荒地老。。。
  • 不用这么麻烦,一个循环,一个语句,实现快速表拆分和表拼接,从此告别复制粘贴



R语言读取并分割 r语言将数据框拆分_语句拼接

类似北蔡这样的商圈总共有215个


上海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函数获取文件中商圈的不同值


R语言读取并分割 r语言将数据框拆分_数据采集_02

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:我们来看下运行结果


R语言读取并分割 r语言将数据框拆分_数据采集_03

拆分了215个项目

step 7:看下总的运行时间,用了0.58秒


R语言读取并分割 r语言将数据框拆分_语句拼接_04

运行时间,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()函数拼接数据,获得最终的结果


R语言读取并分割 r语言将数据框拆分_语句拼接_05

拼接后的数据和原文件一样

结束语:filter和rbind操作使用起来很简单,但它们能解决的问题却很大,工作中经常会需要拆表和合并表操作,如果用复制黏贴,可能需要耗费一天的时间,通过短短的几行代码,就可以在一秒内就处理完所需的工作量。