我想根据第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
....
....
答案 0 :(得分:5)
将data.frames
保留在list
并使用Reduce/merge
。假设所有数据集中first
列的名称为ID
,第二列名称为file1
,file2
等。
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
来阅读它。然后,所有数据集的列名称都是V1
,V2
。我也会使用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))) )