根据第1列合并六个文件

时间:2014-12-23 13:52:36

标签: r perl

我想根据第1列中的字符串标识合并6个csv文件。我想在第2列中为每个文件保留Count-number。以下示例:

文件1:

TAGCTTATCAGACTGATGTTGAC 88902
TAGCACCATTTGAAATCAGTGTT 62017
TAGCTTATCAGACTGATGTTGA  25339
GCATGGGTGGTTCAGTGGTAGAATTCTC    18477
TAGCACCATCTGAAATCGGTTA  12522
CACGGTCCCCCGCGAGGGGGGCCCGGG 11814
TAAAGTGCTGACAGTGCAGAT   10870
GCGCCCTTAGCTCAGTTGGATAGAGCAA    10353
TGTGCAAATCTATGCAAAACTGA 8689

file2的:

TAGCTTATCAGACTGATGTTGAC 290460
TAGCTTATCAGACTGATGTTGA  85960
GCATGGGTGGTTCAGTGGTAGAATTCTC    33273
TAGCACCATTTGAAATCAGTGTT 25284
TAGCACCATCTGAAATCGGTTA  21199
AGTTGGTTAGAGCAACCGG 18608
AGCAGCATTGTACAGGGCTATGA 18449
TGTGCAAATCCATGCAAAACTGA 17968
TAGCTTATCAGACTGATGTTGACA    15530
CACGGTCCCCCGCGAGGGGGGCCCGGG 13258
TGTGCAAATCTATGCAAAACTGA 12847
CCTAAGGCAGGACTGATGACTGGGGTG 12725
GCCGCCGGTGAAATACCACTACTC    11971
TGAGGTAGTAGGTTGTATAGTT  10398

file3的:

TAGCTTATCAGACTGATGTTGAC 181279
TAGCTTATCAGACTGATGTTGA  78661
AGTTGGTTAGAGCAACCGG 24225
CACGGTCCCCCGCGAGGGGGGCCCGGG 22252
AAAAGCTGGGTTGAGAGGGCGA  21334
TGTGCAAATCCATGCAAAACTGA 18541
CGGCGGGTGTTGACGCGATG    17818
TAGCACCATCTGAAATCGGTTA  15642
CCTAAGGCAGGACTGATGACTGGGGTG 14003
TAGCTTATCAGACTGATGTTGACA    12549
TAGCACCATTTGAAATCAGTGTT 12515
AGCAGCATTGTACAGGGCTATGA 12205

输出:

ID                        file1         file2             file3
TAGCTTATCAGACTGATGTTGAC   88902         290460            181279
....
....

1 个答案:

答案 0 :(得分:5)

data.frames保留在list并使用Reduce/merge。假设所有数据集中first列的名称为ID,第二列名称为file1file2等。

Reduce(function(...) merge(..., by='ID'), list(df1, df2, df3))
#                           ID file1  file2  file3
#1 CACGGTCCCCCGCGAGGGGGGCCCGGG 11814  13258  22252
#2      TAGCACCATCTGAAATCGGTTA 12522  21199  15642
#3     TAGCACCATTTGAAATCAGTGTT 62017  25284  12515
#4      TAGCTTATCAGACTGATGTTGA 25339  85960  78661
#5     TAGCTTATCAGACTGATGTTGAC 88902 290460 181279

如果没有headers,您可以使用read.table/read.csv header=FALSE来阅读它。然后,所有数据集的列名称都是V1V2。我也会使用lapply在列表中阅读它。假设您已经单独阅读,

 setNames(Reduce(function(...) merge(..., by='V1'),
          list(df1, df2, df3)),c('ID', paste0('file',1:3)) )

如果您想从list

中读取working directory中的所有文件
 files <- list.files(pattern='^file\\d+.csv')
 lst <- lapply(files, function(x) read.csv(x,header=FALSE))
 setNames(Reduce(function(...) merge(..., by='V1'),
          lst),c('ID', paste0('file',seq_along(files))) )