查看原文
其他

R-数据处理基础篇-上千上万个内含单列数据的Excel文件如何整合为上千上万列的单个文件?不会做,看这里~

申泽西 TheWhoOPs 2021-09-19

目录

  • 0.问题导入

  • 1.基于Runif及sapply函数生成示例数据及文件

  • 2.基于sapply函数将多个单列文件读入并合并为一个文件

  • 3.基于for循环与cbind将多个单列文件读入并合并为一个文件

  • 4.文件比较与写出

  • 5.效率分析

  • 6.总结

  • 7.致谢

  • 8.号外!TheWhoOPs平台与全国地研联公众号实现线上战略合作

0. 问题导入

在数据处理过程中,我们有时会碰到上千上万个内含单列数据的Excel文件?这样在对其进行相同批处理的时候,会十分耗时,因为需要对于每一个文件,我们的程序都需要进行一次“读取、修改及写出”的操作。因此,为了提高计算效率,我们往往需要将这些Excel文件整合为一个,那么应该怎么做呢?本篇给出解决方案~

1. 基于Runif及sapply函数生成示例数据及文件

setwd('/Users/jerseyshen/Documents/JianShu_Project/20200217')
dir.create('files')

gen_file <- function(files_name){
temp = runif(100,-10,10)
temp = matrix(temp, ncol = 1)
write.csv(temp,files_name)
}

files = paste0("files/","F",1:1000,'.csv')
sapply(files,gen_file)

图1 多个单列文件截图

2. 基于sapply函数将多个单列文件读入并合并为一个文件

files = list.files()
read_in <-function(x){
temp = read.csv(x,header = T)
temp = temp[,-1]
return(temp)
}
system.time(input_mat <- sapply(files,read_in))
user system elapsed
0.391 0.042 0.433
dim(input_mat)
[1] 100 1000

3. 基于for循环与cbind将多个单列文件读入并合并为一个文件

t_s = Sys.time()
input_mat2 = 1
for(i in 1:length(files)){
temp = read.csv(files[i],header = T)
temp = temp[,-1]
input_mat2 = cbind(input_mat2,temp)
}
input_mat2 = input_mat2[,-1]
t_e = Sys.time()
t_u = t_e - t_s
print(t_u)
print(t_u)
Time difference of 1.076704 secs
dim(input_mat2)
[1] 100 1000

4. 文件比较与写出

我们通过比较两个矩阵差值的和可以看到这两种方法在导入与合并文件的结果中没有区别,最后均生成了一个100行,1000列(每列对应一个文件)的合并后的矩阵。

sum(input_mat - input_mat2)
[1] 0
write.csv(input_mat2, '...你的路径...')

5. 效率分析

通过比较sapply函数与for函数的读取与合并效率,我们会发现sapply的效率在本例中是for函数的一倍。具体关于sapply及其系列批处理函数的用法,我们会在接下来的博文中做详细介绍。

6. 总结

本篇中主要解决了以下几个技术问题:

  1. 如何在R语言中读取及写出csv文件?

  2. 如何基于R语言实现多个单列csv文件的导入、合并与写出?

    1.  我们可以选择基于for循环与cbind函数的基础操作

    2. 也可以选择基于sapply与自建函数的高级操作

7. 致谢

首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

大家如果觉得有帮助啊,还麻烦大家关注点赞,也可以扩散到朋友圈,多多引导朋友加入咱们这个技术平台, 代码共享推动科研进程, 多谢大家啦~

大家如果在使用本代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~

祝大家身体健康,多多保重!!

扫描二维码

获取Jersey

联系方式


8. 号外!TheWhoOPs平台与全国地研联公众号实现线上战略合作

这是与全国地研联联合推出的第四篇R语言技术推文-基础篇。

从2020年2月10日起,TheWhoOPs技术公众号将与全国地理学研究生联合会公众号(简称地研联)公众号实现全面线上合作。

合作内容主要包括为周一,三,五的R语言数据数据分析及可视化文章的线上共享发布及每周日的b站技术直播讲解,直播间地址:https://live.bilibili.com/21877620。

如果大家觉得有帮助还劳烦多多帮忙宣传下哈!!


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存