【问题标题】:Merge six files based on column 1 [duplicate]根据第 1 列合并六个文件 [重复]
【发布时间】:2015-02-21 16:16:29
【问题描述】:

我有 6 个 csv 文件,我想根据第 1 列中的字符串标识进行合并。我想在第 2 列中为每个文件保留计数。请参阅下面的示例:

文件1:

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

文件2:

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

文件3:

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
....
....

【问题讨论】:

  • 你能和我们分享你迄今为止的尝试吗?

标签: r perl


【解决方案1】:

将所有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.csvheader=FALSE 来阅读它。然后,所有数据集的列名将是 V1V2。我也会使用lapply 在列表中阅读它。假设你已经单独阅读过,

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

如果你想从working directory读取list中的所有文件

 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))) )

【讨论】:

  • 我认为数据集的名称是file1file2 等。这些是列名
  • @DavidArenburg 谢谢,是的,它看起来像那样。所以,也许,列名应该V1V2等自动生成。
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多