请选择 进入手机版 | 继续访问电脑版
楼主: moonstone
6317 3

[程序分享] 批量合并多个相同格式的文件 [推广有奖]

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
10435 个
通用积分
335.3455
学术水平
160 点
热心指数
169 点
信用等级
124 点
经验
262166 点
帖子
237
精华
1
在线时间
519 小时
注册时间
2007-4-27
最后登录
2024-2-1

moonstone 发表于 2015-11-9 13:01:35 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
基因测序或表达水平的原始数据通常是按照统一格式整理成一个个体一个文件,分析这些数据之前,通常需要把这些“个体文件”合并成一个文件。或者有时候并不想合并每个个体的所有数据,而只是选择性地合并特定的数据。当然该问题并不仅限于测序或基因表达水平数据,比如多年累计的医院个体电子病例数据,等等

传统的一个一个文件合并通常费时费力,还可能出错,此时批量合并这些文件就显得比较重要。下面简单介绍基于R的批量合并多个相同格式文件的方法。

程序如下:

  1. setwd("D:/R practice")  

  2. ## 示例数据.

  3. patientID <- c(1, 2, 3, 4)
  4. name<- c("lts", "has", "grl", "lst")
  5. age <- c(25, 34, 28, 52)
  6. patientdata1 <- data.frame(patientID, name, age)
  7. write.table(patientdata1, file="patientdata1.txt", quote=F, sep = "\t", row.names = F)

  8. patientID <- c(5, 6, 7, 8)
  9. name<- c("gss", "txs", "mrx", "qst")
  10. age <- c(45, 38, 37, 15)
  11. patientdata2 <- data.frame(patientID, name, age)
  12. write.table(patientdata2, file="patientdata2.txt", quote=F, sep = "\t", row.names = F)

  13. con=dir()

  14. ## 分步合并所有数据演示.
  15. last=data.frame()

  16. text=read.table(con[1],header=T)
  17. last=rbind(last,text)

  18. text=read.table(con[2],header=T)
  19. last=rbind(last,text)

  20. ## 循环语句合并所有数据演示.
  21. last=data.frame()

  22. for(i in 1:length(con))
  23. {text=read.table(con[i],header=T)
  24. last=rbind(last,text)}


  25. ## 循环语句合并每个数据库的前两行演示.
  26. last=data.frame()
  27. for(i in 1:length(con))
  28. {text=read.table(con[i],header=T)
  29. text=text[1:2,]
  30. last=rbind(last,text)}

  31. ## 循环语句合并每个数据库的前两列演示.
  32. last=data.frame()
  33. for(i in 1:length(con))
  34. {text=read.table(con[i],header=T)
  35. text=text[,1:2]
  36. last=rbind(last,text)}
复制代码


如果大家有更好、更简便的方法,或者更好的示例说明如何处理类似问题,欢迎跟帖,^_^

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Practice practic Patient 基因测序 文件合并 practice 选择性 程序 电子

jiangbeilu 学生认证  发表于 2015-11-9 19:53:33 |显示全部楼层 |坛友微信交流群
# 注意这个目录下只有txt文档
filename=list.files()
# 用sapply读取
zz<- sapply(filename,function(x) read.table(x,head=T) )
# 合并文件
mergedata = do.call("rbind",zz)

使用道具

ccs0531 发表于 2018-1-4 23:49:07 |显示全部楼层 |坛友微信交流群
setwd("E:/ccstest/R")                                                                    #设定工作目录为D盘
> a = list.files("data")                                                       #list.files命令将input文件夹下所有文件名输入a
> dir = paste("./data/",a,sep="")                                      #用paste命令构建路径变量dir
> n = length(dir)                                                                 #读取dir长度,也就是文件夹下的文件个数
> merge.data = read.csv(file = dir[1],header=T,sep=",")   #读入第一个文件内容(可以不用先读一个,但是为了简单,省去定义data.frame的时间,我选择先读入一个文件。
> for (i in 2:2){
+     new.data = read.csv(file = dir[i], header=T, sep=",")
+     merge.data = rbind(merge.data,new.data)
+ }
>
> #循环从第二个文件开始读入所有文件,并组合到merge.data变量中
> write.csv(merge.data,file = "./data/merge.csv",row.names=F)  #输出组合后的文件merge.csv到input文件夹

使用道具

ccs0531 发表于 2018-1-4 23:49:55 |显示全部楼层 |坛友微信交流群
ccs0531 发表于 2018-1-4 23:49
setwd("E:/ccstest/R")                                                                    #设定工作目 ...
D 换成E ,input换成data

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 08:59